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

  • My docker容器失败,因为它试图以
    当前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和演示问题所需的其他脚本将有助于澄清问题。