[英]Docker + NodeJS: node_modules not the same between docker-compose up and docker-compose run
[英]Docker/Reactjs/Nodejs - How to install dependencies and run application after docker-compose up
我正在嘗試使用 Nodejs 服務器 dockerize 一個 Reactjs 應用程序。 在許多示例中,我們必須在 Dockerfile 中安裝依賴項,但我想在容器以腳本啟動后安裝。 有可能做到嗎?
我的 docker-compose 文件:
version: '3.7'
services:
web-server:
container_name: webserver
build:
context: ./docker/web-server
dockerfile: ./Dockerfile
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
working_dir: /usr/src/app
我的 Dockerfile:
FROM node:alpine
COPY scripts/docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 3000
我的 docker-entrypoint.sh:
#!/bin/sh
[ ! -d "node_modules" ] && npm install
ls -la
npm start
容器日志:
total 644
drwxrwxr-x 8 node node 4096 Oct 3 12:19 .
drwxr-xr-x 3 root root 4096 Oct 3 12:19 ..
-rw-rw-r-- 1 node node 0 Oct 3 12:16 .dockerignore
drwxrwxr-x 8 node node 4096 Oct 2 23:57 .git
-rw-rw-r-- 1 node node 317 Oct 2 22:23 .gitignore
drwxrwxr-x 4 node node 4096 Oct 3 12:52 .idea
-rw-rw-r-- 1 node node 2891 Oct 2 20:22 README.md
drwxrwxr-x 3 node node 4096 Oct 2 23:57 docker
-rw-rw-r-- 1 node node 325 Oct 2 23:52 docker-compose.yml
drwxr-xr-x 1020 node node 36864 Oct 3 12:19 node_modules
-rw-rw-r-- 1 node node 577492 Oct 2 20:23 package-lock.json
-rw-rw-r-- 1 node node 748 Oct 2 20:23 package.json
drwxrwxr-x 2 node node 4096 Oct 2 20:22 public
drwxrwxr-x 2 node node 4096 Oct 2 23:04 src
> docker-react@0.1.0 start /usr/src/app
> react-scripts start
ℹ 「wds」: Project is running at http://172.19.0.2/
ℹ 「wds」: webpack output is served from
ℹ 「wds」: Content not from webpack is served from /usr/src/app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...
我想這樣做以保持與另一個項目中的 Symfony API 相同的安裝邏輯。 但我的例子不起作用。
更新 1:現在我正在嘗試將我的項目構建到圖像中,但在運行docker-compose up -d --build
后它仍然無法正常工作
Dockerfile:
FROM node:alpine
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml:
version: '3.7'
services:
web-server:
container_name: webserver
build:
context: .
dockerfile: ./docker/web-server/Dockerfile
ports:
- "3000:3000"
在我的 docker-compose.yml 中添加選項stdin_open: true
解決了這個問題。
docker-compose.yml:
version: "3.7"
services:
web-server:
container_name: webserver
build:
context: ./docker/web-server
dockerfile: ./Dockerfile
ports:
- "3000:3000"
stdin_open: true
environment:
- CHOKIDAR_USEPOLLING=true
- NODE_ENV=development
volumes:
- .:/usr/app
working_dir: /usr/app
Dockerfile:
FROM node:alpine
COPY scripts/docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
docker-entrypoint.sh:
#!/bin/sh
[ ! -d "node_modules" ] && npm install
npm start
現在它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.