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"]