docker compose,用户仍以root用户身份创建文件夹
我有一个docker compose,用户仍以root用户身份创建文件夹,docker,docker-compose,docker-volume,Docker,Docker Compose,Docker Volume,我有一个docker compose.yml如下: 版本:“3.4” 服务: 网状物: 建造: 上下文:../web/ dockerfile:dockerfile本地 端口: - 3000:3000 用户:${CURRENT\u UID} 卷数: -../web:/web -web\u节点\u模块:/web/node\u模块/ 卷数: 网络节点模块: Dockerfile local: FROM node:12-alpine # having these lines # commented
docker compose.yml
如下:
版本:“3.4”
服务:
网状物:
建造:
上下文:../web/
dockerfile:dockerfile本地
端口:
- 3000:3000
用户:${CURRENT\u UID}
卷数:
-../web:/web
-web\u节点\u模块:/web/node\u模块/
卷数:
网络节点模块:
Dockerfile local
:
FROM node:12-alpine
# having these lines
# commented or not doesn't change anything
# VOLUME ["/web"]
# VOLUME ["/web/node_modules"]
WORKDIR /web
EXPOSE 3000
CMD ["sh", "-c", "npm install ; npm run watch-tests"]
我在start.sh
中设置了CURRENT\u UID
,如下所示:
export CURRENT\u UID=$(id-u):$(id-g)
码头工人整理
我们有二进制依赖项,所以我们需要在容器和主机(对于VS代码)之间保持node\u模块
的分离
问题:
node\u modules
,则该文件夹由docker compose
创建,尽管它保持为空,但所有权设置为0:0
。当我尝试在本地执行npm安装时,这是有问题的,因为我没有以0:0
当前UID
的形式进行npm安装,但即使是docker容器节点模块的内部
也归0:0
所有。这是失败的
node\u modules\.gitkeep
并仍然忽略node\u modules
,或者更新脚本,在启动docker compose
之前始终在主机上创建该文件夹来修复此问题
问题:
有没有更好的办法解决这个问题?我是否可以强制docker compose在我的系统上创建文件夹
node\u modules
,并在docker容器内部创建为CURRENT\u UID
?如果删除整个卷:
块,docker将使用图像中内置的代码和node\u modules
树,用户ID与主机不匹配也不会成为问题。您可以使用主机节点安装进行日常开发和单元测试,并在需要进行集成测试和部署时重新运行docker build
。@DavidMaze不作为Dockerfile工作,只公开1个卷,我正在尝试解决这个问题。一个典型的基于节点的应用程序的Dockerfile根本没有任何VOLUME
指令;即使它这样做了,也不会影响哪些代码被复制到映像中,以及哪些包运行npm install
安装。也许编辑问题以包含Dockerfile和演示问题所需的其他脚本将有助于澄清问题。如果删除整个卷:
块,Docker将使用图像中内置的代码和节点模块
树,并且用户ID与主机不匹配不会成为问题。您可以使用主机节点安装进行日常开发和单元测试,并在需要进行集成测试和部署时重新运行docker build
。@DavidMaze不作为Dockerfile工作,只公开1个卷,我正在尝试解决这个问题。一个典型的基于节点的应用程序的Dockerfile根本没有任何VOLUME
指令;即使它这样做了,也不会影响哪些代码被复制到映像中,以及哪些包运行npm install
安装。也许编辑问题以包含Dockerfile和演示问题所需的其他脚本将有助于澄清问题。