![](/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.