【发布时间】:2021-10-05 12:46:56
【问题描述】:
我有一个 Docker 映像,它实际上是设备的服务器。它是从 Python 脚本开始的,我制作了 .sh 来运行它。但是,每当我运行它时,它都会说它已执行并结束(服务器以代码 0 退出)。我让它工作的唯一方法是通过 docker-compose 当我将它作为分离容器运行时,然后通过 bin/bash 进入容器并从中手动执行运行脚本(前面提到的 .sh),然后退出容器。
之后一切都按预期工作,但是当服务器重新启动时会出现问题。我必须重新手动完成。
有没有其他人经历过类似的事情?如果是,我该如何解决?
启动服务器的文件(start.sh):
#!/bin/sh
python source/server/main.pyc &
python source/server/main_socket.pyc &
python source/server/main_monitor_server.pyc &
python source/server/main_status_server.pyc &
python source/server/main_events_server.pyc &
Dockerfile:
FROM ubuntu:trusty
RUN mkdir -p /home/server
COPY server /home/server/
EXPOSE 8854
CMD [ /home/server/start.sh ]
Docker 编写:
version: "3.9"
services:
server:
tty: yes
image: deviceserver:latest
container_name: server
restart: always
ports:
- "8854:8854"
deploy:
resources:
limits:
memory: 3072M
【问题讨论】:
-
您在容器中运行的脚本应该记录到标准输出,而不是作为守护进程或后台任务运行。所有这五个进程都需要运行吗?如果是这样,您也许应该考虑为每个进程运行一个单独的容器
-
@IainShelvington 是的,不幸的是,它们都需要在同一个容器中运行。这是我无法改变的。
-
您可以将
tail -f /dev/null添加为脚本的最后一行。这似乎是一种创建永无止境的流程的流行方式。 -
为什么不能改变这个?也许像
supervisor这样的东西可能适合你?
标签: python docker shell docker-compose