【问题标题】:Mystery of the Restarting Docker Container重启 Docker 容器之谜
【发布时间】: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"

复制步骤

  1. 请参阅我的链接帖子 here 以了解我的完整设置。
  2. 运行 docker-compose up -d。这将启动容器。
  3. 运行 docker ps 以验证它们都已启动并已运行 15 秒 或更多。
  4. 运行 docker-compose kill 以停止容器。 运行 docker-compose up -d 再次启动容器,每 5 秒跟踪一次 docker ps 以观察 Web 容器上的一致重启。随意杀死并重启多次,重启将保持正在发生。
  5. 有趣的是,注释掉 docker-compose.yml 中的一行 文件。就我而言,我注释掉了 php.ini 文件的体积 像这样,#- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini
  6. 运行 docker-compose kill 以再次停止容器。然后运行 ​​docker-compose up -d这一次容器将神奇地工作而无需重新启动??

我的问题是为什么稍微更改 docker-compose.yml 文件然后启动它会导致它现在工作? 如果我在此之后出于任何原因杀死容器并尝试再次启动不更改 docker-compose.yml 文件,然后在 Web 容器上发生重启循环。 为什么要这样做?

下面附上一张图片,显示它在上次从我附上的第一张图片重新启动后工作。在图片中请忽略并原谅ERROR: yaml.scanner.ScannerError: 我忘记了我的 MySQL 密码,所以请确保你只是放了一些东西让它开心。报错后的内容显示突然又开始工作了。

【问题讨论】:

  • docker logsdocker 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


【解决方案1】:

答案是不要使用 run docker-compose kill 而是使用 docker-compose down 因为 docker-compose kill 只会杀死容器但不会清除 docker-compose 为您创建的缓存.

【讨论】:

  • 谢谢先生!,花了很多时间,甚至尝试使用不同版本的mysql / mariadb,它只是不断重启......然后我尝试单独使用docker run,它工作正常,但是docker -compose 根本不工作......如果其他人也经历同样的事情,这工作!
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2018-03-01
相关资源
最近更新 更多