使用Docker Compose连接到另一个容器

26
我需要同时使用两个容器:一个带有Tomcat,另一个带有数据库。
我已经创建了以下的yaml文件来描述这些服务:
postgredb:
  image: postgres
  expose:
    - 5432
  ports:
    - 5432:5432
  environment:
    - POSTGRES_USER=user
    - POSTGRES_PASSWORD=password
tomcat:
  image:  tomcat
  links:
    - postgredb:db
  ports:
    - 8080:8080

在启动docker-compose之后,我发现我无法从Tomcat访问数据库,除非我检索数据库的IP地址(通过docker inspect),并在配置Tomcat连接池到数据库时使用它。

据我了解,这两个容器应该被链接起来,我期望在本地主机的端口5432上找到数据库,否则我认为将容器链接在一起没有多少好处。

我的理解正确吗?

2个回答

47

2
这句引用语的来源是什么? - oxr463
1
@rage 看起来源代码是 https://docs.docker.com/compose/compose-file/compose-file-v2/#links,只是有一些词汇被修改了。 - AnhellO
2
为了让这更清晰:如果你有类似于 base_url_api = "http://127.0.0.1:4999/" 的东西,而你有一个名为“api”的服务,那么你可以写成 base_url_api = "http://api:4999/" 实际上你甚至不需要涉及网络别名。 - rictuar

2

对于较新版本的docker-compose

链接是一种遗留选项。我们建议改用网络。

version: "3"

services:
  web:
    image: "nginx:alpine"
    networks:
      - new

  worker:
    image: "my-worker-image:latest"
    networks:
      - legacy

  db:
    image: postgredb
    networks:
      new:
        aliases:
          - db
      legacy:
        aliases:
          - postgredb

networks:
  new:
  legacy:

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