需要 EC2 docker 容器的 mkdir 权限

Need mkdir permission for EC2 docker container

我有一个 docker-compose,其中 运行s 3 个容器:

  1. selenium/hub

  2. selenium/node-chrome

  3. 我自己的 java 程序图像,它使用上述 2 个容器登录网站,导航到下载页面,单击复选框,然后单击提交按钮,这将导致下载文件。

在我的电脑上 运行 一切正常,但在 EC2 实例上 chrome 节点出现错误:

mkdir: 无法创建目录“/home/selsuser”

然后在尝试创建子目录时出现其他错误。

如何给容器 mkdir 权限?

我想运行将其作为 ECS-Fargate 任务,因此我还需要在该任务中授予容器 mkdir 权限。

谢谢

嗯,

感谢您提供详细信息。看来你确实需要你没有的权利。您可以尝试创建一个用户组并在您的容器中共享它。

这样做,

  • 使用尚不存在的 GID 创建一个组用户(在您的终端上输入 id 以查看所有现有的 GID)。我们假设 500 尚未使用:
chown :500 Downloads
  • 然后,为您的新组赋予适当的权限,并使所有子文件夹具有您创建的组的权限:
chmod 665 Downloads && chmod g+s Downloads

(如果你想放心,你可以随时给予完全许可,由你决定)

  • 然后通过 Dockerfile 与在容器中创建的组共享权限(将 <username><group_name> 替换为您想要的任何内容:
FROM selenium/node-chrome:3.141.59
RUN addgroup --gid 500 <group_name> &&\
adduser --disabled-password --gecos "" --force-badname --ingroup 500 <username>
USER <username>

当然不要忘记编辑您的 docker-compose 文件:

selenium:
   build:
      context: <path_to_your_dockerfile>

希望它会起作用:)


(来自问题作者)

I do have volume mapping, but I do not think there is any connection there to the problem I have. The problem is the selenium/node-chrome container wants to create the directory. On my pc, there are no problems, on EC2 it causes an error that it cannot create the directory. I assume on EC2 you need root privs to do anything on /home.

这是完整的 docker-compose 文件:

version: "3"
services:
  hub:
    image: selenium/hub:3.141.59
    ports:
      - "4444:4444" 
  chrome:
    image: selenium/node-chrome:3.141.59
    shm_size: '1gb'
    depends_on:
      - hub
    environment:
      - HUB_HOST=hub
    volumes:
      - ./Downloads:/home/seluser/Downloads     
  migros-module:
    image: freiburgbill/migros-docker
    depends_on:
        - chrome
    environment:
        - HUB_HOST=hub
        - BROWSER=chrome
    volumes:
        - ./migros-output:/usr/share/udemy/test-output
        - ./Downloads:/usr/share/udemy/Downloads 

再次感谢 Paul Barrie 的意见和帮助让我更仔细地了解权限。

对于 运行 在我的电脑上运行但在 EC2 实例上不起作用的 docker-compose 文件,我创建了一个 /tmp/download 目录并赋予它完整的权限( sudo chmod -R 2775 /tmp/Downloads), 然后它 运行 没有任何问题!

尝试做与 ECS-Fargate 任务相同的事情。我创建了一个 EFS,将 EFS 附加到一个 EC2 实例,这样我就可以进入它并设置整个 EFS 的权限(sudo chmod -R 777 /mnt/efs/fs1,这是将 EFS 连接到 EC2 的默认路径).然后,我创建了 ECS-Fargate 任务,将 EFS 作为卷附加。然后一切正常!

所以在夏季,docker-compose 所在的主机 运行 必须具有写入文件的权限。使用 Fargate 我们无法访问主机,因此必须授予 EFS 写入文件的权限。

我知道必须有更好的方法来将安全性锁定到只需要什么,但开放权限确实有效。

如果我能更改 Fargate 临时存储的权限并使用绑定挂载就好了,但我找不到办法做到这一点。