如何解决docker-compose,用户仍以root身份创建文件夹
我有一个docker-compose.yml
,如下所示:
version: "3.4"
services:
web:
build:
context: ../web/
dockerfile: Dockerfile-local
ports:
- 3000:3000
user: ${CURRENT_UID}
volumes:
- ../web:/web
- web_node_modules:/web/node_modules/
volumes:
web_node_modules:
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"]
我在CURRENT_UID
中将start.sh
设置如下:
export CURRENT_UID=$(id -u):$(id -g)
docker-compose up
我们具有二进制依赖性,因此我们需要node_modules
将它们与容器和主机分开(对于VS Code)。
问题:
-
如果主机上的
node_modules
不存在,则该文件夹由docker-compose
创建,尽管该文件夹保持为空,但所有权设置为0:0
。当我尝试在本地执行npm install
时,这是有问题的,因为我没有以0:0
的身份运行 -
我的docker容器失败,因为它尝试将
npm install
用作CURRENT_UID
,但即使在docker容器node_modules
内,它也归0:0
所有。这会失败。
解决方案:
我可以通过创建node_modules\.gitkeep
并仍然忽略node_modules
来解决此问题,或者通过更新脚本以在启动docker-compose
之前始终在主机上创建该文件夹。
问题:
有没有更好的方法来解决这个问题?我可以强制docker-compose
在我的系统上创建文件夹node_modules
,并在docker容器内部创建CURRENT_UID
吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。