使用Docker合成连接到其他容器

ehxuflar  于 2023-03-17  发布在  Docker
关注(0)|答案(2)|浏览(123)

我需要同时使用两个容器:一个使用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)并在配置到DB的Tomcat连接池时使用它。
据我所知,这两个容器应该链接在一起,并且我希望在localhost的端口5432上找到数据库,否则链接容器没有什么好处。
我的理解正确吗?

deikduxw

deikduxw1#

使用在文件中定义的别名“db”来引用数据库主机名。
链接服务的容器将可通过与别名相同的主机名访问,如果未指定别名,则可通过服务名访问。
图片来源:https://docs.docker.com/compose/compose-file/compose-file-v2/#links

brccelvz

brccelvz2#

对于较新版本的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:

相关问题