gpt4 book ai didi

Docker 用户无法写入已安装的文件夹

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

我有以下设置:

  selenium-chrome:
image: selenium/node-chrome-debug:3.141.59-neon
container_name: chrome-e2e
depends_on:
- selenium-hub
environment:
- HUB_HOST=selenium-hub
- HUB_PORT=4444
- SHM-SIZE=2g
- GRID_DEBUG=false
- NODE_MAX_SESSION=1
- NODE_MAX_INSTANCES=5
- TZ=Europe/Brussels
hostname: chrome-e2e
networks:
- build-network
ports:
- 5900:5900
volumes:
- ./target:/home/seluser/Downloads

Selenium 测试在容器内部运行,实际测试代码在容器外部。我们使用 Maven 处理容器的生命周期。如您所见,我将 Chrome 下载文件夹(在容器内)安装到应用程序的 target 文件夹中。一切都安装良好,但当 Chrome 尝试下载文件时,写入 /home/seluser/Downloads 的权限被拒绝。/home/seluser/Downloads 的 UID 和 GID 被 Docker 设置为 2100:2100。 Chrome 本身是通过 seluser 用户运行的。

我需要做什么才能授予 seluser 写入 2100 拥有的文件夹的权限?

提前致谢。问候

最佳答案

Linux 中的绑定(bind)挂载不会对 uid 或 gid 执行任何命名空间,并且主机挂载在幕后运行绑定(bind)挂载。因此,如果容器内的 uid 与主机上的 uid 不同,您将遇到权限问题。我已经在其他容器中使用修复权限脚本解决了这个问题。实现类似于以下 Dockerfile:

FROM selenium/node-chrome-debug:3.141.59-neon
COPY --from=sudobmitch/base:scratch /usr/bin/gosu /usr/bin/fix-perms /usr/bin/
COPY entrypoint.sh /entrypoint.sh
# use a chmod here if you cannot fix permissions outside of docker
RUN chmod 755 /entrypoint.sh
USER root
ENTRYPOINT [ "/entrypoint.sh" ]

entrypoint.sh 看起来像:

#!/bin/sh
if [ "$(id -u)" = "0" -a -d "/home/seluser/Downloads" ]; then
fix-perms -r -u seluser /home/seluser/Downloads
exec gosu seluser /opt/bin/entry_point.sh "$@"
else
exec /opt/bin/entry_point.sh "$@"
fi

这里发生的情况是容器以 root 身份启动,fix-perms 脚本调整容器内的 seluser 以匹配 /home/seluser/Downloads 的 uid > 目录。然后,exec gosu 以新 pid 1 的 seluser 身份运行容器进程。

您可以在以下位置查看用于实现此功能的代码:https://github.com/sudo-bmitch/docker-base

我在几个演示中讨论过此方法,包括:https://sudo-bmitch.github.io/presentations/dc2019/tips-and-tricks-of-the-captains.html#fix-perms

关于Docker 用户无法写入已安装的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56019914/

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