我创建了一个包含所有配置的python server.py
。
最后我想从npm start
运行一个python服务器
还有来自CMD
因为我可以有一个ENTRYPOINT
或docker run
如何在执行JVM_OPTS="$JVM_OPTS -Dcassandra.ignore_rack=true -Dcassandra.ignore_dc=true"
时启动这两个服务器?
Docker推荐的处理这类情况的方法是什么?
答案 0 :(得分:2)
如果要在一个容器中运行多个进程,可以使用supervisord
- 例如npm
和python server
。
查看documentation for supervisord了解详情。
我只选了一些重要的部分。
类似的东西:
CentOS: `yum install supervisor`
Ubuntu: `apt-get install -y supervisor`
supervisord.conf
)的配置复制到docker镜像
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
在您的情况下,supervisord.conf
应如下所示(未经测试):
[supervisord]
nodaemon=true
[program:npm]
command=npm start
[program:python]
command=python server.py
并在Dockerfile中运行supervisord
CMD
命令:
...
# install supervisord
# copy supervisord configuration
...
# run supervisord
CMD ["/usr/bin/supervisord"]
答案 1 :(得分:0)
所以更新后的答案是现在可以使用pip安装主管
运行pip install --upgrade supervisor
。 administratord.conf仍然与@VladoDemcak正确指出的相同。并且可以使用CMD
命令运行受监管的人
CMD ["supervisord", "-c", "./path/to/supervisord.conf"]
在docker容器中。 -c
标记用于指定conf文件的路径。
答案 2 :(得分:0)
这是一种简单轻巧的方法。
步骤1 :创建脚本文件runner.sh
#!/bin/bash
python server.py &
P1=$!
npm start &
P2=$!
wait $P1 $P2
第2步:在Dockerfile
的末尾添加以下行
..
..
COPY runner.sh /scripts/runner.sh
RUN ["chmod", "+x", "/scripts/runner.sh"]
ENTRYPOINT ["/scripts/runner.sh"]
就像奶油一样
说明:
some_command &
意味着运行some_command并将其置于后台python server.py &
意味着运行python server.py并将此过程置于后台。注意:这适用于具有基于 Debian 的基础映像(如Ubuntu
)的Docker映像