【发布时间】:2023-04-06 18:55:01
【问题描述】:
我注意到一种很容易重现的模式,但我无法回答为什么它会在我的一生中发生。出于某种原因,如果我使用命令docker-compose kill(杀死所有容器),然后使用docker-compose -d 重新启动它,我的Web 容器就会陷入无限循环的重启。我已经在整个互联网上寻找答案,但找不到任何东西。
如下所示,它显示了查看正在发生的事情的步骤。
请参阅我制作的这篇文章 (Docker-Compose won't volume my php.ini file),了解我在此处以完全相同的方式使用的完整 docker 设置,但我将在此处附上我的 docker-compose 文件以供快速参考。
docker-compose.yml
version: '2'
services:
dblive:
image: mysql:5.5.52
volumes:
- ./db_data_live:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****
dbdev:
image: mysql:5.5.52
volumes:
- ./db_data_dev:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD:****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****
phpmyadmin:
depends_on:
- dblive
- dbdev
image: phpmyadmin/phpmyadmin
environment:
PMA_ARBITRARY : 1
restart: always
ports:
- "8081:80"
web:
build: ./
depends_on:
- dblive
- dbdev
volumes:
- ./web:/var/www
- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini
- ./logs/apache_error.log:/var/log/apache2/error.log
- ./logs/apache_access.log:/var/log/apache2/access.log
- ./config/apache_default.conf:/etc/apache2/sites-enabled/000-default.conf
restart: always
ports:
- "80:80"
- "443:443"
复制步骤
- 请参阅我的链接帖子 here 以了解我的完整设置。
- 运行 docker-compose up -d。这将启动容器。
- 运行 docker ps 以验证它们都已启动并已运行 15 秒 或更多。
- 运行 docker-compose kill 以停止容器。
运行
docker-compose up -d再次启动容器,每 5 秒跟踪一次 docker ps 以观察 Web 容器上的一致重启。随意杀死并重启多次,重启将保持正在发生。 - 有趣的是,注释掉 docker-compose.yml 中的一行
文件。就我而言,我注释掉了 php.ini 文件的体积
像这样,
#- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini - 运行 docker-compose kill 以再次停止容器。然后运行 docker-compose up -d 和 这一次容器将神奇地工作而无需重新启动??
我的问题是为什么稍微更改 docker-compose.yml 文件然后启动它会导致它现在工作? 如果我在此之后出于任何原因杀死容器并尝试再次启动不更改 docker-compose.yml 文件,然后在 Web 容器上发生重启循环。 为什么要这样做?
下面附上一张图片,显示它在上次从我附上的第一张图片重新启动后工作。在图片中请忽略并原谅ERROR: yaml.scanner.ScannerError: 我忘记了我的 MySQL 密码,所以请确保你只是放了一些东西让它开心。报错后的内容显示突然又开始工作了。
【问题讨论】:
-
docker logs和docker inspect对重新启动的容器显示什么? -
你能给我一个例子如何使用这些命令吗?您希望我在什么时候也使用这些命令? (例如重启时,重启后等......)
-
我还想指出,就在最近我发现如果我执行 docker-compose down,我似乎没有 docker-compose kill 出现的重启问题。也许我只是不应该使用 kill??
-
这些命令将容器名称作为参数(如果没有运行,它将打印一个用法)。容器当前关闭并等待超时重新启动时的输出。
-
你有任何涉及 web 的 Dockerfile 吗?我知道 Dockerfile 中的每一步本身就是一个层并被缓存。因此,也许 docker-compose.yml 指令也被缓存(我不知道),并且一旦您触摸该层重新创建的东西并且以下层也会这样做。不确定我是否能满足您的问题,但只是为了尝试您可以运行“docker-compose up --force-recreate”
标签: php docker docker-compose dockerfile restart