Docker Compose(Docker)中没有设置目录权限



我的服务(docker-compose.yml):

nodejs:
build:
context: configs/nodejs
args:
- UID=$UID
- GID=$GID
container_name: nodejs_container
volumes:
- ${APP_HOST}:${APP_CONTAINER_PATH}
working_dir: ${APP_CONTAINER_FRONTEND_PATH}
command: sh -c "ls -la && npm install && npm run build"

我Dockerfile:

FROM node:lts-alpine
ARG UID
ARG GID
RUN npm install -g @vue/cli
USER $UID:$GID

但是文件的权限设置不正确

nodejs_container | total 728
nodejs_container | drwxrwxr-x    4 1001     xfs           4096 Jan 26 07:09 .
nodejs_container | drwxrwxr-x   15 1001     xfs           4096 Jan 26 06:06 ..
nodejs_container | -rw-rw-r--    1 1001     xfs             43 Jan 24 16:47 .browserslistrc
nodejs_container | -rw-rw-r--    1 1001     xfs            121 Jan 24 16:47 .editorconfig
nodejs_container | -rw-rw-r--    1 1001     xfs           3302 Jan 24 16:47 .eslintrc.js
nodejs_container | -rw-rw-r--    1 1001     xfs            283 Jan 24 16:47 .gitignore
nodejs_container | -rw-rw-r--    1 1001     xfs            427 Jan 24 16:47 README.md
nodejs_container | -rw-rw-r--    1 1001     xfs             76 Jan 24 16:47 babel.config.js
nodejs_container | -rw-rw-r--    1 1001     xfs             50 Jan 24 16:47 cypress.json
nodejs_container | -rw-rw-r--    1 1001     xfs            834 Jan 24 16:47 jest.config.js
nodejs_container | -rw-rw-r--    1 1001     xfs         680479 Jan 26 06:54 package-lock.json
nodejs_container | -rw-rw-r--    1 1001     xfs           2048 Jan 25 09:26 package.json
...

在启动docker之前,我设置了环境变量:export UID=$(id -u)export GID=$(id -g)

为什么不为运行docker compose的环境变量中的目录和文件设置$UID:$GID值?

尝试环境args

作为一个例子,

https://docs.docker.com/compose/environment-variables/

当您将volumes:挂载到本机linux主机上的容器上时,在容器中使用主机系统的数字文件所有者和权限。如果主机用户ID 1001拥有这些文件,那么在容器内它们也将由ID 1001拥有。容器的用户ID在这里不起作用。

原则上,您可以使用入口点包装器脚本来更改文件的所有者,但这也会更改它们在主机上的所有者。更好的做法是将您当前拥有的所有设置移到Dockerfile:COPY(应用程序代码)中,RUN npm ci && npm build,然后设置容器的CMD来启动应用程序。这个隔离容器运行的特定用户ID无关紧要,不过最好不要使用root用户。

考虑到您所展示的Dockerfile和Compose设置,仅使用主机节点进程可能更有效。它自然会使用主机的文件系统和主机用户ID运行。如果您只是试图将此设置用作本地文件的构建系统,则更是如此。

最新更新