在 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: { ... }
我正在尝试使用 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: { ... }