需要 EC2 docker 容器的 mkdir 权限
Need mkdir permission for EC2 docker container
我有一个 docker-compose,其中 运行s 3 个容器:
selenium/hub
selenium/node-chrome
我自己的 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 临时存储的权限并使用绑定挂载就好了,但我找不到办法做到这一点。
我有一个 docker-compose,其中 运行s 3 个容器:
selenium/hub
selenium/node-chrome
我自己的 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 临时存储的权限并使用绑定挂载就好了,但我找不到办法做到这一点。