簡體   English   中英

如何在 dockerfile CMD 腳本中執行 npm start

[英]How to execute npm start within dockerfile CMD script

下面的 Dockerfile 運行一個簡單的腳本,它應該啟動一個 React 應用程序和一個 python 應用程序:

# syntax=docker/dockerfile:1

FROM nikolaik/python-nodejs

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY RPDC-front-end/package.json RPDC-front-end/package.json
RUN cd RPDC-front-end && npm install

COPY . .

EXPOSE 1234

RUN chmod u+r+x wrapper-script.sh

CMD ./wrapper-script.sh

./wrapper-script.sh 文件如下:

#!/bin/sh

python3 -m launcher.py
cd RPDC-front-end && npm start

我可以看到 python 和 node 包都安裝在其適當的位置,但只有 python 應用程序啟動。 包裝腳本中的npm start命令似乎不起作用。 但是,如果我打開正在運行的容器的終端並在 RDPC-front-end 目錄(所有節點包和相關代碼所在的目錄)中手動運行npm start ,則應用程序將構建並可以通過端口 1234 訪問。我修復了我的腳本/dockerfile 以便npm start命令起作用嗎?

雖然你不應該使用同一個容器來運行多個服務,但這里的問題是調用

python3 -m launcher.py

是(我認為)阻塞,這意味着在此命令退出之前,shell 不會繼續執行命令。

而是嘗試在 python 命令之后放置一個 & 以在后台運行它:

python3 -m launcher.py &

嘗試將您的 Dockerfile 更改為:

# syntax=docker/dockerfile:1

FROM nikolaik/python-nodejs

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY RPDC-front-end/package.json RPDC-front-end/package.json
RUN cd RPDC-front-end && npm install

COPY . .

EXPOSE 1234

RUN chmod u+r+x wrapper-script.sh

CMD ["python3", "-m launcher.py"]

RUN cd RPDC-front-end && npm start

如果你想保留你的腳本文件,你可以檢查為什么 'npm start' 失敗,只需將腳本更改為:

#!/bin/sh

python3 -m launcher.py
cd RPDC-front-end ; npm start 2> errorLog.txt

如果命令失敗,錯誤消息將存儲在 errorLog.txt 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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