【发布时间】:2019-06-29 10:14:21
【问题描述】:
我有一个安装了 python 和 java 的 docker 映像,现在我想将这两个进程作为 docker 的子进程运行。
我查看了这篇文章,它解释了如何在安装了 docker 和 python 的情况下准备图像。它没有解释如何让它们都运行。 How to run Docker with python and Java?
我检查了如何在 docker 中运行多个进程 https://runnable.com/docker/rails/run-multiple-processes-in-a-container
我知道在一个容器中运行多个进程是坏事。这是一个紧迫性和局限性,所以我会坚持一段时间。
所以 docker 文档(上面)说,准备一个 shell 文件,它启动两个进程并在 docker 文件中运行它。
但是!!!我从主机命令行 (docker exec -it container_name bash) 连接到我的 docker。我看到 (top) 正在运行进程。有Java进程在运行,而python进程没有运行。
我的 Dockerfile
# Prepare slim python, and install open-jdk-11
ENTRYPOINT ./startJavaAndPython.sh
startJavaAndPython.sh
java -XX:+UseContainerSupport $JAVA_OPTIONS -jar java-app.jar;
python app.py;
我也看了https://askubuntu.com/questions/287350/start-a-new-process-without-blocking-the-terminal
和https://unix.stackexchange.com/questions/152310/how-to-correctly-start-an-application-from-a-shell/305769,这在我的情况下不起作用。因为如你所见,在我的shell中,如果一个命令不以;结尾,那么我启动docker时就会出现错误。
更新
1) 所以,& 号没有帮助。
startJavaAndPython.sh
java -XX:+UseContainerSupport $JAVA_OPTIONS -jar java-app.jar &;
python app.py &;
我也试过了,但是没用。 startJavaAndPython.sh
java -XX:+UseContainerSupport $JAVA_OPTIONS -jar java-app.jar &
python app.py &
我收到了
$ docker run my-composed-task
: not foundonJava.sh: 1: ./startJavaAndPython.sh:
: not startJavaAndPython.sh: 2: ./startJavaAndPython.sh:
2) 我可以启动我的 docker 容器,通过 ssh 连接到它,然后手动运行 python 应用程序。它会工作的!但是如何自动完成,无需手动操作!
3) 我使用 Windows 10 作为主机。
我使用了这些链接,可能对其他人有帮助。 https://askubuntu.com/questions/287350/start-a-new-process-without-blocking-the-terminal
【问题讨论】:
-
如果你连接到容器并键入命令手动启动python脚本?您是否收到错误或进程正在启动?
-
不!我 ssh 我的 docker,并手动启动了 python 应用程序。成功了!!!
-
python进程是否依赖java进程?如果是这样,可能是当python启动时java程序还没有启动,所以你有一个失败
-
为什么需要用分号结束命令?我以前从未见过。你不能用 bash 运行你的入口点脚本吗?
-
那么您的 java 和 python 进程都在容器的生命周期内运行?
标签: java python windows shell docker