如何使入口点运行一个启动服务脚本没有退出容器在docker-compose?



docker-compose。yml:

version: "3"
services:
xx:
image: xx:1.0
container_name: instance
command: /home/admin/start.sh start && tail -f /dev/null
network_mode: "host"
tty: true

我使用docker-compose up来启动容器。

问题是在start.sh start完成后集装箱会显示Exited (0)

我知道命令或入口点将启动pid 1进程,如果进程完成,容器将退出。

所以,我添加了tail -f /dev/null来防止它退出,但我不知道为什么它仍然退出。

我只想启动服务(/home/admin/start.sh start)并保持容器存活。在docker-compose.yml中command应该是什么?

您应该将应用程序作为前台进程运行。不要使用"服务"。脚本或其他任何将应用程序作为守护进程启动的内容。

# Run the application itself, not a "start" script that launches
# a background process
command: /home/admin/admin_application

这个主命令通常是映像的一个属性:无论何时启动容器,这都是您几乎总是想要运行的东西。这意味着将其指定为Dockerfile中的CMD更合适:

CMD ["/home/admin/admin_application"]

那么在你的docker-compose.yml中,你不需要重写这个值。您通常也不需要指定container_name:(Compose可以自己分配),tty:(仅用于交互式程序)或network_mode: host(通常禁用Docker网络)。你的docker-compose.yml可以小到

version: "3.9" # "3" means "3.0"
services:
xx:
image: xx:1.0
# ports: ["8080:8080"]

最新更新