重启Docker容器之谜

时间:2017-01-18 01:48:07

标签: php docker docker-compose dockerfile restart

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

如下所示,显示了查看正在发生的事情的步骤。

enter image description here

请参阅我在此处发布的帖子(Docker-Compose won't volume my php.ini file),以完全相同的方式使用我的完整泊坞设置,但我会在此处附上我的docker-compose文件以供快速参考。

搬运工-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 这次容器将神奇地工作而不重新启动?
  7. 我的问题是为什么稍微更改docker-compose.yml文件然后启动会导致它现在正常工作? 如果我在此之后因任何原因杀了容器并尝试再次启动而不在docker-compose.yml 文件中进行更改,然后在Web容器上发生重启循环。 为什么要这样做? < / p>

    下面附有一张图片,显示它是从我附加的第一张图片重新开始之后工作的。在图像中请忽略并原谅ERROR: yaml.scanner.ScannerError:我忘记了我已经将我的MySQL密码删掉了,所以请确保你只是把东西放在那里让它开心。错误后的内容显示它突然重新开始工作。

    enter image description here

1 个答案:

答案 0 :(得分:2)

答案是不使用run docker-compose kill而是使用 docker-compose down ,因为docker-compose kill只会杀死容器,但不会清除docker-compose为你做的缓存