![](/img/trans.png)
[英]How to start child cmd terminals in separate windows, from python script and execute scripts on them?
[英]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.