[英]How to avoid changing permissions on node_modules for a non-root user in docker
[英]How to keep node_modules inside container while using docker-compose and a non-root user?
我正在尋找一種同時實現這些目標的方法:
node_modules
保留在容器內(以免“污染”主機上的工作目錄) Dockerfile
我不確定這些目標是否被視為“最佳實踐”。 例如,將node_modules
保留在容器內有其缺點 。
目前我的撰寫文件是這樣的:
services:
# ...
node:
image: "node:9"
user: "node"
working_dir: /home/node/app
environment:
# - NODE_ENV=production
- NPM_CONFIG_PREFIX=/home/node/.npm-global
- PATH=$PATH:/home/node/.npm-global/bin
volumes:
- ./proj/:/home/node/app
- /home/node/app/node_modules # mark1
ports:
- "3001:3001"
command: >
bash -c "echo hello
&& ls -lh /home/node/app/
&& npm install
&& npm i -g babel-cli
&& npm i -g flow-bin
&& npm start"
depends_on:
- redis
但是有
"Error: EACCES: permission denied, access
'/home/node/app/node_modules'".
如果我注釋掉#mark1
行,則容器會運行,但是node_modules
會被寫入主機(因為./proj
已經安裝 )
我已經閱讀了關於這個主題的這兩篇文章:
但都達不到我的目標。
我添加了一行ls -lh /home/node/app/
,發現node_modules
由root
擁有。 這可能是問題所在。
我最終使用了Dockerfile
。 這是最低限度的。 (我保留一些注釋掉的行,任何人都可能覺得它們很有用。)
我們需要更改容器內node_modules
的所有者。 似乎 ( 更新 :對不起。我忘了刪除帶有node:9
圖像不需要這個。 所以這只適用於node:9-alpine
。 docker system prune
的構建容器。兩個映像都需要這個。這是關於命名卷的權限/所有權的討論。 )
FROM node:9-alpine
#ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
#ENV PATH=$PATH:/home/node/.npm-global/bin
RUN mkdir -p /home/node/app/node_modules
RUN chown -R node:node /home/node/app
#USER node
#WORKDIR /home/node/app
#RUN npm install --silent --progress=false ; \
# npm i -g babel-cli --silent --progress=false ;\
# npm i -g flow-bin --silent --progress=false
docker-compose.yml
最終如下:
services:
# ...
node:
# image: "node:9-alpine"
build: ./proj
user: "node"
working_dir: /home/node/app
environment:
# - NODE_ENV=production
- NPM_CONFIG_PREFIX=/home/node/.npm-global
- PATH=$PATH:/home/node/.npm-global/bin
volumes:
- ./proj/:/home/node/app
- /home/node/app/node_modules/
ports:
- "3006:3001"
command: >
/bin/sh -c "echo hello
&& ls -lh /home/node/app/
&& npm install
&& npm i -g babel-cli
&& npm i -g flow-bin
&& npm start"
depends_on:
- redis
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.