我设置了一个Dockerfile来运行一项服务,该服务需要运行一些后续命令才能正确初始化。我创建了一个具有以下结构的启动脚本,并将其设置为我的入口点:
显然,这不起作用,因为服务是在后台启动的,入口点脚本将以代码0退出。如何在配置完成后保持此容器运行?没有繁忙的循环运行是否可以这样做?
答案 0 :(得分:1)
配置完成后如何保持此容器运行?没有繁忙的循环运行是否可以这样做?
在众多选项中:
sleep inf
之类的东西,这不是繁忙的循环而且不占用CPU时间。supervisord
这样的流程主管来启动您的服务并启动配置脚本。答案 1 :(得分:0)
您可以查看此GitHub问题和特定评论- https://github.com/docker-library/wordpress/issues/205#issuecomment-278319730
总而言之,您可以执行以下操作:
version: '2.1'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:latest
volumes:
- "./wp-init.sh:/usr/local/bin/apache2-custom.sh"
depends_on:
db:
condition: service_started
ports:
- 80:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
command:
- apache2-custom.sh
wp-init.sh
是您编写要执行的代码的地方。
请注意command
yml标签:
command:
- apache2-custom.sh
因为我们在volumes
标记中绑定了两者,所以它实际上将在您的容器内的wp-init.sh
中运行代码。