簡體   English   中英

Docker/Reactjs/Nodejs - 如何在 docker-compose up 后安裝依賴項並運行應用程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM