0

情况是这样的:我有三个不同的 docker 为三个不同的项目编写文件:一个前端、一个中间件和一个后端。FE 是 Ember、中间件和后端 spring(引导)。不过,这在这里无关紧要。中间件使用 external_link 到后端,前端 (UI) 使用 external_link 到中间件。

当我从一个干净的 docker (docker stop $(docker ps -aq), docker rm $(docker ps -aq)) 开始时,一切正常:我用 docker-compose up 启动后端,然后是中间件,然后是前端。一切都很好,所有外部链接都可以正常工作(也在此设置上运行赛普拉斯 e2e 测试 - 工作正常)。

现在,当我在中间件中更改某些内容时,重建映像,停止容器(control+c)并使用 docker-compose up 重新启动它,然后尝试重新启动前端(control + c 然后 docker-compose up),码头工人会告诉我:

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 显示中间件的容器实际上正在运行。

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

在 Docker 版本 18.09.0 上运行,构建 4d60db4 Ubuntu 18.04.1 LTS

我想在没有损坏外部链接的情况下重新启动这些容器中的任何一个。我如何实现这一目标?

既然你们花时间陪我,我就花时间清理了两个作曲。这是 UI/前端之一:

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”本质上与中间件相同。

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

4

0 回答 0