重启Docker容器的奥秘

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

看起来像下面显示的步骤,看看发生了什么。

在这里输入图像说明

请参阅我所做的这篇文章( Docker-Compose将不会调整我的php.ini文件 ),以完全相同的方式在此处使用我的完整泊坞窗安装程序,但是我将在此处附加我的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. 请参考我在这里链接的post,让我的完整设置遵循。
  2. 运行docker-compose up -d 。 这将启动容器。
  3. 运行docker ps来validation它们已经全部启动了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:我忘了我XX'ed了我的MySQL密码,所以确保你只是把东西在那里,使它感到高兴。 错误之后的内容显示它突然重新开始工作。

在这里输入图像说明

答案是不使用运行docker-compose kill,而是使用docker-compose down,因为docker-compose kill只杀死容器但不清除docker-compose为你创build的caching。