gpt4 book ai didi

docker - 使用 Travis 时,已安装的 Docker 卷具有不同的所有权

转载 作者:行者123 更新时间:2023-12-04 17:22:41 26 4
gpt4 key购买 nike

这个问题与this repository有关与最相关的 Travis 工作 here .

存储库用于从 Jupyter 笔记本构建的静态站点。笔记本是使用 build/build.py 转换的,它为每个帖子构建一个 Docker 镜像,启动一个相应的容器并安装了帖子笔记本目录,并使用 nbconvert 来将笔记本转换为 Markdown。 nbconvert 转换的一个步骤涉及创建支持文件目录。由于权限问题,这在 Travis 上失败了。

在尝试调试此问题时,我发现在运行 Docker 之前,我的本地计算机和 Travis(我的用户名已切换为 travis)上的 repo 的所有权和权限是相同的。尽管如此,在 Docker 容器的挂载卷中,所有权是不同的:

本地:

drwxrwxr-x 3 jovyan  1000   4096 Dec 10 19:56 .
drwsrwsr-x 1 jovyan users 4096 Dec 3 21:51 ..
-rw-rw-r-- 1 jovyan 1000 105 Dec 7 09:57 Dockerfile
drwxr-xr-x 2 jovyan 1000 4096 Dec 10 12:09 .ipynb_checkpoints
-rw-r--r-- 1 jovyan 1000 154229 Dec 10 12:28 post.ipynb

特拉维斯:

drwxrwxr-x 2   2000  2000  4096 Dec 10 19:58 .
drwsrwsr-x 1 jovyan users 4096 Nov 8 16:37 ..
-rw-rw-r-- 1 2000 2000 101 Dec 10 19:58 Dockerfile
-rw-rw-r-- 1 2000 2000 35271 Dec 10 19:58 post.ipynb

我的本​​地机器和 Travis 都运行 Ubuntu 20.04,具有相同版本的 Docker,并且所有其他工具都来自 Conda,因此应该表现相同。我很难理解这种所有权差异从何而来。

最佳答案

尝试使用此命令再次运行 docker,以便容器外部的 uid 在内部传播:

docker run -u `id -u`

备选方案,如 @anemyte 所指:

docker run -u $(id -u)

这应该涉及在 docker 中创建新文件,由 “jovyan” 拥有。

如果你能猜到挂载点会存在,你也可以预先创建它们,这样里面文件的所有权也是正确的:

docker run -v /path/on/host:/path/in/container ...

如果您将本地路径 (/path/on/host) 的权限设置为 777,这也会传播到挂载点:无权限错误无论 docker 使用哪个用户创建这些文件,都会被抛出。

之后,如果需要,您可以自由恢复权限。

关于docker - 使用 Travis 时,已安装的 Docker 卷具有不同的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65241546/

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