在 docker-compose 中链接容器时出错

Error with linking containers in docker-compose

我正在尝试使用 docker compose 构建应用程序的映像和容器。然而,当我尝试 link 容器时,它一直给出错误“服务 api 有一个 link 服务 'containername',这是未定义的”。有人知道我做错了什么吗?

这是我的代码:

version: "3.9"
services:
  db:
    image: mysql:5.6
    ports:
      - 23306:3306
    volumes:
      - .:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: quint
      MYSQL_DATABASE: cddb_quin
      MYSQL_USER: cddb_quint
      MYSQL_PASSWORD: quint
    container_name: cddb_mysql
  api:
    build: ./backend
    ports:
      - 28080:8080
    image: javaimage:latest
    links:
      - cddb_mysql:mysql
    container_name: cddb_backend
  web:
    build: ./frontend
    ports:
      - 20080:80
    image: angularimage:latest
    links:
      - cddb_backend
    container_name: cddb_frontend

Compose links: 是一项已过时的功能。即使在模糊的现代 Compose 中——任何带有 top-level services: 块的 Compose 文件——Compose 都会自动为你创建一个 Docker 网络并将所有服务附加到它。您几乎总是可以安全地删除 links: 而不会丢失任何功能。

可以使用 links: 而不是 Docker 网络的一件事是使另一个容器以不同的名称可见。您拥有的 links: [cddb_mysql:mysql] 语法可以做到这一点。不过这样做并没有什么特别的好处。

因此,修复您遇到的错误的最简单方法是删除所有 links: 块。您没有显示如何配置数据库连接,但您需要将其配置为指向数据库 db 的 Compose 服务名称。 Docker 文档中的 Networking in Compose 进一步描述了此设置。

(您也可以删除所有 container_name: 设置,并且在您 build: 的图像上,如果您不打算推送,则可以删除它们的手动 image: 名称他们到注册表。)

version: '3.8'
services:
  api:
    build: ./backend
    ports:
      - 28080:8080
    environment:
      - MYSQL_HOST=db
  db: { ... }
  backend: { ... }