Py学习  »  docker

docker compose-成功重新启动后外部链接失败

Markus • 5 年前 • 586 次点击  

情况是这样的: 我有三个不同的docker为三个不同的项目编写文件:前端、中间件和后端。fe是ember、中间件和后端spring(boot)。但这在这里不重要。中间件使用到后端的外部_链接,前端(ui)使用到中间件的外部_链接。

当我从一个干净的docker(docker stop$(docker ps-aq)、docker rm$(docker ps-aq))开始时,一切都很好:我从docker compose up、middleware、frontend开始后端。一切都很好,所有外部链接都可以工作(也可以在此设置上运行cypress e2e测试-工作正常)。

现在,当我在中间件中更改一些内容,重新生成图像,停止容器(control+c)并使用docker compose up重新启动它,然后尝试重新启动前端(control+c,然后docker compose up),docker会告诉我:

Starting UI ... error

    ERROR: for UI  Cannot start service ui: Cannot link to a non running container: /32f2db8e96a1_middleware AS /ui/backend

    ERROR: for UI  Cannot start service ui: Cannot link to a non running container: /32f2db8e96a1_middleware AS /ui/backend
    ERROR: Encountered errors while bringing up the project.

现在让我恼火的是: “32f2db8e96a1”是从哪里来的?中间件容器名被设置为“middleware”,它也用于ui的外部链接中,对于每次干净的启动(也就是说,使用docker rm“-all”之前)都可以正常工作。另外,Docker PS向我展示了中间件的容器实际上正在运行。

不幸的是,我不能在这里发布撰写文件,但我愿意添加任何需要的信息。

在Docker18.09.0版本上运行,构建4D60DB4 ubuntu 18.04.1 LTS公司

我想重新启动这些容器中的任何一个,而不需要断开外部链接。我怎样才能做到这一点?

既然你们花时间给我,我花时间把两首曲子删掉了。这是用户界面/前端:

files:
version: '2.1'

services:

  ui:
    container_name: x-ui
    build:
      dockerfile: Dockerfile
      context: .
    image: "xxx/ui:latest"
    external_links:
      - "middleware:backend"
    ports:
      - "127.0.0.1:4200:80"
    network_mode: bridge

这是中间件:

version: '2.1'

services:

  middleware:
    container_name: x-middleware
    image: xxx/middleware:latest
    build:
      dockerfile: src/main/docker/middleware/Dockerfile
      context: .
    ports:
      - "127.0.0.1:8080:8080"
      - "127.0.0.1:9003:9000"
    external_links:
      - "api"
    network_mode: "bridge"

“api”基本上与中间件相同。

请注意:我删除了卷和环境。另外,我重命名了,这样错误消息名称就不会完全匹配。请注意命名模式是相同的:服务名类似于“中间件”,容器名使用前缀“x-middleware”。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43647
 
586 次点击