提问人:alks 提问时间:7/29/2023 最后编辑:alks 更新时间:7/30/2023 访问量:71
目录的 Сontent 仅在 Docker 卷中部分绑定
Сontent of the directory is only partially bonded in Docker Volumes
问:
我有一个在 Docker 容器中运行的 Node.JS 服务,该容器通过 REST 部署相关的 Docker 容器(Docker-outside-of-Docker)。
操作序列(在 NodeJS 容器内):
- 创建一个新文件夹。
- 从 git 存储库下载具有目录结构和文件的存档。
- 提取存档(目标文件夹也是 NodeJS 容器中的卷)。
- 将该命令应用于整个提取的内容。
chown -R 0755 .
- 编辑文件(这里没什么特别的;所有挂载的文件都标记为 - 读写)。
docker-compose.yml
volumes
:rw
- 跑。
docker-compose up -d
运行后,我注意到容器中指定的目录中的某些内容不存在( - 空文件夹,但在解压缩的文件中,我看到这个文件夹不是空的。docker-compose up -d
volumes
ls -la
为什么会这样,我该如何解决这个问题?
我已经试过了:
- 以 、
root
- 授予模式,
privileged
- 在 ,
sleep
docker-compose up -d
- 改变
chmod -R 0777 .
chown www-data:www-data
- 替换为
mv
cp
- 替换为
:rw
:Z
UPD: 基本操作系统:
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
基于 NodeJS 容器 (Debian 12)
基于node:20-slim
php:8.2-fpm-alpine3.18
UPD:添加更多想法:
在我正在创建的容器中,我的用户是 www-data。但是,在 nodejs 容器中,www-data 用户的 UID/GID = 33,而在 alpine 容器中,它是 UID/GID = 82(也许这导致了冲突?
我相信问题出在这里的某个地方,有文件权限。
更新: 我在 NodeJS 容器中从 Debian 切换到 Alpine,但问题仍然存在。
更新:
在容器内执行时,很明显,某些文件夹(包含在卷中)具有不同的用户作为所有者。尝试更改用户会导致错误 。
但是,如果停止一个容器,然后从 的用户执行,则容器将启动,并且所有权限都是正确的。ls -la
chown -R 82:82 [folder]
chown: [folder]: Operation not permitted
docker-compose up -d
root
host machine
答:
Docker 外部的 Docker
我怀疑您提供给 docker-compose 的目录是相对于 docker-compose 文件的。
你在外面的docker上运行。这意味着指定的目录是外部的目录,它们是运行 docker 守护程序的主机上的目录。volumes:
因为默认情况下会创建一个空目录,所以很可能您在运行 docker demon 的主机上创建了一堆空目录。请考虑使用表单,以便在目录不存在作为保护时,docker 失败并显示找不到目录。volumes:
volumes: - type: bind source: /dir target: /dir
评论
cat /etc/os-release