gpt4 book ai didi

docker - 无法将 Docker 卷的写入权限授予 Docker Compose 中的非 root 用户

转载 作者:行者123 更新时间:2023-12-02 19:46:15 25 4
gpt4 key购买 nike

我正在运行一个 Docker Compose 环境,在该环境中执行一堆 Selenium 测试。为了做到这一点,我使用了 images Selenium provides .我运行两个容器:一个作为 Selenium 集线器 另一个是 Selenium Firefox 节点 .我定义了第三个容器,负责测试执行(我们称之为 测试节点 )。
我创建了 使用的 Docker 卷Selenium Firefox 节点 测试节点 所以某些文件可以由他们俩共享。我调用音量selenium_volume它同时安装在 /selenium_tests 上.
我很快就遇到了一个问题,因为该文件夹是在两个系统中为用户 root 创建的。 ,但用户 Selenium Firefox 节点 默认使用 seluser .它具有读取但没有写入权限,这是我需要的。
我尝试使用以下内容作为容器 entrypoint ,所以我制作 seluser目录所有者:bash -c 'sudo chown -R seluser:seluser /selenium_tests && /opt/bin/entry_point.sh' ,但它不工作。
当我在启动后连接到容器( docker exec -ti selenium-firefox bash )时,我看到该文件夹​​仍然属于 root .如果我在连接后运行命令 sudo chown -R seluser:seluser /selenium_tests && /opt/bin/entry_point.sh' ,文件夹权限已更改,我们达到了我所期望的点。
我想知道为什么当我手动运行命令时它可以工作,但在运行 entrypoint 时却不行。在容器的入口点脚本之前。
目前我的docker-compose.yml看起来类似于以下内容:

    version: '3.8'

services:
tests-node:
build: .
depends_on:
- selenium-hub
- selenium-firefox
# the wait-for-it.sh command makes the container wait until the Selenium containers are ready to work
entrypoint: ["./wait-for-it.sh", "-t", "15", "selenium-firefox:5555", "--"]
command: ["execute_tests.sh"]
volumes:
- ./remote_reports/:/selenium_tests/reports/
- type: volume
source: selenium_volume
target: /selenium_tests
networks:
selenium_net: {}

selenium-hub:
image: selenium/hub:3.141.59
ports:
- "4444:4444"
networks:
selenium_net: {}

selenium-firefox:
image: selenium/node-firefox:3.141.59
depends_on:
- selenium-hub
entrypoint: bash -c 'sudo chown -R seluser:seluser /selenium_tests && /opt/bin/entry_point.sh'
volumes:
- /dev/shm:/dev/shm
- type: volume
source: selenium_volume
target: /selenium_tests
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
networks:
selenium_net: {}
expose:
- 5555

volumes:
selenium_volume:

networks:
selenium_net:
driver: bridge
我尝试将 chown 命令运行为 commandentrypoint 之后但我认为它永远不会到达,因为在 entrypoint 期间启动的脚本一直在前台运行。
我想直接在 docker-compose.yml 上做所有的事情,避免创建任何 Dockerfile,但我不知道这是否可行。

最佳答案

我找到了一个可能的解决方案。使用它作为入口点:

bash -c '( while ! timeout 1 bash -c "echo > /dev/tcp/localhost/5555"; do sleep 1; done ; sudo chown -R seluser:seluser /selenium_tests ) & /opt/bin/entry_point.sh'
它运行 & 之前的部分代码。在后台,允许 entry_point.sh运行没有问题。当端口 5555 准备好后,它最终将所需文件夹的权限授予 seluser .

关于docker - 无法将 Docker 卷的写入权限授予 Docker Compose 中的非 root 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63191953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com