重启Docker后,Docker Compose无法启动服务,提示找不到网络。

13

我正在使用 Windows 版 Docker (版本 18.03.0-ce-win59 (16762)),运行在 Windows 10 Pro 上。在运行命令 docker-compose -up -d 后,所有容器都能正常运行。但当我重启 docker 服务后,所有容器都会停止运行,并且运行命令 docker-compose start -d 时会显示以下错误:

Error response from daemon: network ccccccccccccc not found

我不知道发生了什么。当我使用run命令和--restart=always选项运行容器时,一切都按预期工作。重新启动时没有显示任何错误。

这是docker-compose文件:

version: '3'

services:
  service_1:
    image: image1
    restart: always
    build:
      context: C:/ProgramData/Docker/volumes/foo2
      dockerfile: Dockerfile
      args:
        ENTRY: "1"
    volumes:
      - C:/ProgramData/Docker/volumes/foo1:C:/foo1
      - C:/ProgramData/Docker/volumes/foo2:C:/foo2
  service_2:
    image: image2
    restart: always
    build:
      context: C:/ProgramData/Docker/volumes/foo2
      dockerfile: Dockerfile
      args:
        ENTRY: "2"
    volumes:
      - C:/ProgramData/Docker/volumes/foo1:C:/foo1
      - C:/ProgramData/Docker/volumes/foo2:C:/foo2
  service_3:
    image: image3
    restart: always
    build:
      context: C:/ProgramData/Docker/volumes/foo2
      dockerfile: Dockerfile
      args:
        ENTRY: "4"
    volumes:
      - C:/ProgramData/Docker/volumes/foo1:C:/foo1
      - C:/ProgramData/Docker/volumes/foo2:C:/foo2

这些dockerfile的格式如下:

FROM microsoft/dotnet-framework:3.5

ARG ENTRY
ENV my_env=$ENTRY

WORKDIR C:\\foo2

ENTRYPOINT C:/foo2/app.exe %my_env%
4个回答

22

网络已经改变。我使用了docker network prune命令来解决相同的问题。重新创建容器可以修复此问题。Docker将为新容器再次设置网络。

#remove all containers
docker rm $(docker ps -qa)
#or
docker system prune

10

可能存在一些未被删除的旧容器实例。使用以下命令检查这些实例:

docker container ls -a

如果您有一些未被移除的实例,您可能会得到类似于这样的输出。
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
8b4678e6666b        b4a75a01d539        "/bin/sh -c 'eval `s…"   6 weeks ago         Exited (1) 6 weeks ago                       zealous_allen
ee862a3418f2        1eaaf48e9b42        "/bin/sh -c 'eval `s…"   6 weeks ago         Exited (1) 6 weeks ago                       jolly_torvalds

按照容器ID删除容器

docker container rm 8b4678e6666b
docker container rm ee862a3418f2 

现在使用docker-compose文件启动你的容器。这对我很有效,希望能帮到你!


也许只是删除网络可能是一个更温和的初始方法? - danielcaballero88

5
我找到了一个可能的解决方案,需要编辑docker-compose.yml文件如下:
version: '3'

services:
  cm04:
    image: tnc530_cm04
    networks:
      - test
    privileged: false
    restart: always
    build:
      context: C:/ProgramData/Docker/volumes/adontec/LSV2_Lib/Heidenhain/TNC530
      dockerfile: Dockerfile
      args:
        ENTRY: "1"
    volumes:
      - C:/ProgramData/Docker/volumes/sqlite:C:/sqlite
      - C:/ProgramData/Docker/volumes/adontec/LSV2_Lib/Heidenhain/TNC530/bin/x86/Release:C:/adontec
  cm06:
    image: tnc620_cm06
    networks:
      - test
    privileged: false
    restart: always
    build:
      context: C:/ProgramData/Docker/volumes/adontec/LSV2_Lib/Heidenhain/TNC620
      dockerfile: Dockerfile
      args:
        ENTRY: "2"
    volumes:
      - C:/ProgramData/Docker/volumes/sqlite:C:/sqlite
      - C:/ProgramData/Docker/volumes/adontec/LSV2_Lib/Heidenhain/TNC620/bin/x86/Release:C:/adontec
  cm08:
    image: tnc620_cm08
    networks:
      - test
    privileged: false
    restart: always
    build:
      context: C:/ProgramData/Docker/volumes/adontec/LSV2_Lib/Heidenhain/TNC620
      dockerfile: Dockerfile
      args:
        ENTRY: "4"
    volumes:
      - C:/ProgramData/Docker/volumes/sqlite:C:/sqlite
      - C:/ProgramData/Docker/volumes/adontec/LSV2_Lib/Heidenhain/TNC620/bin/x86/Release:C:/adontec

networks:
  test:
    external:
      name: nat

正如您所看到的,我创建了一个名为test的网络,与外部网络nat链接在一起。现在,当我重新启动docker服务时,容器会无错误地启动。


1
这个 GitHub issue 正在跟踪同样的问题。将 networks 部分添加到 docker-compose 中,对我来说解决了这个问题。 - jhhwilliams

1

或者,您可以打开Docker应用程序并手动删除容器。然后在终端上运行docker-compose up。现在应该可以工作了。转到端口9000或9001或您正在使用的任何端口,并查看Minio是否实际运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接