Docker无法启动服务,因为已经存在

Posted

技术标签:

【中文标题】Docker无法启动服务,因为已经存在【英文标题】:Docker Cannot start service as already exists 【发布时间】:2018-03-14 12:38:32 【问题描述】:

运行docker-compose up -d我得到以下错误:

Starting cr-redis ... 
Starting cr-rabbitmq ... 
Starting cr-rabbitmq ... error

Starting cr-redis ... error

Starting cr-mysql ... error

ERROR: for cr-mysql  Cannot start service mysql: container "ff36...1116": already exists

ERROR: for rabbitmq  Cannot start service rabbitmq: container "3b6c...0aba": already exists

ERROR: for redis  Cannot start service redis: container "e84f...df91": already exists

ERROR: for mysql  Cannot start service mysql: container "ff36...1116": already exists
ERROR: Encountered errors while bringing up the project.


docker-compose ps   
     Name                    Command                State                                    Ports                                
----------------------------------------------------------------------------------------------------------------------------------
cr-mysql       docker-entrypoint.sh mysqld      Exit 255                                                                       
cr-php-fpm     /bin/sh -c /usr/sbin/php-f ...   Exit 255   9000/tcp                                                            
cr-rabbitmq    docker-entrypoint.sh rabbi ...   Exit 255                                                                       
cr-redis       docker-entrypoint.sh redis ...   Exit 255                                                                       
cr-webserver   nginx -g daemon off;             Exit 255   0.0.0.0:15672->15672/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:9003->9003/tcp

如何在不重新创建容器的情况下重新启动容器?我只是不想丢失数据库中的数据。

--------------- 更新 --------

$ docker-compose stop
$ docker-compose start
Starting redis     ... error
Starting rabbitmq  ... error
Starting mysql     ... error
Starting php-fpm   ... error
Starting webserver ... error

ERROR: for rabbitmq  Cannot start service rabbitmq: container "3b6c...0aba": already exists

ERROR: for mysql  Cannot start service mysql: container "ff36...1116": already exists

ERROR: for redis  Cannot start service redis: container "e84f...f91": already exists
ERROR: No containers to start

【问题讨论】:

好的,几天前我遇到了同样的情况,我不得不删除 (docker-compose down) 并重新创建容器。但这对我来说不是问题,因为我不需要保留数据。我注意到 github 上的一些问题提到了 "container already exists" 问题,它将在 18.03 版本中得到解决。 好点,我有 Docker 版本 18.02.0-ce,构建 fc4de447b5 【参考方案1】:

您的情况可能与将在18.03 版本中修复的错误有关。这里提出了一些解决方法:

https://github.com/docker/for-linux/issues/211 https://github.com/moby/moby/issues/36145

docker-compose up 为服务构建、(重新)创建、启动和附加到容器。

由于您的images 已构建并且您的服务的containers 已启动,因此您可以使用

docker-compose stopdocker-compose start

启动/停止您的服务。这与docker-compose down 不同:

停止容器并删除由up 创建的容器、网络、卷和映像。


关于如果容器被移除会丢失数据的危险,请阅读持久存储以及如何使用volumes

【讨论】:

我认为是我的版本引起的错误。 Docker 版本 18.02.0-ce【参考方案2】:

您需要改用docker-compose start

$ docker-compose start --help
Start existing containers.

Usage: start [SERVICE...]

【讨论】:

以上是关于Docker无法启动服务,因为已经存在的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenSUSE 中更新到 1.12.6-176.1 后无法启动 docker 服务:

Docker安装启动过程

解决docker容器无法sshd开机自启动

解决docker容器无法sshd开机自启动

docker学习笔记:修改无法启动的容器中的内容

Docker 容器中部署项目后一直重启原因排查