重启 Docker 容器之谜

Mystery of the Restarting Docker Container

我注意到了一种很容易重现的模式,但我无法回答为什么它会在我的一生中发生。出于某种原因,如果我使用命令 docker-compose kill(杀死所有容器),然后使用 docker-compose -d 重新启动它,我的 Web 容器将陷入无限重启循环。我在互联网上到处寻找这方面的答案,但找不到任何东西。

看起来像下面这样显示 steps 看看发生了什么。

请参考我制作的 post () 完整的 docker 设置,此处使用的方法完全相同,但我会附上我的 docker-在此处撰写文件以供快速参考。

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"

Steps 复制

  1. 请参阅我的链接 post 以了解我的完整设置。
  2. 运行 docker-组合-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-composekill而是用docker-composedown因为docker-composekill只会杀容器,但不会清除 docker-compose 为您创建的缓存。