首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用坞-组合从节点容器连接postgres容器?

如何使用坞-组合从节点容器连接postgres容器?
EN

DevOps用户
提问于 2019-12-05 15:31:55
回答 1查看 1K关注 0票数 0

我试图使用docker-组合从节点应用程序容器连接到postgresql容器,但我无法做到这一点。这是我的docker-compose.yml文件:

代码语言:javascript
运行
复制
version: '3.7'
services:
  db:
    image: postgres:12.1
    ports:
      - "5432:5432"
    env_file:
      - "./.env"
    networks:
      - tcp-modbus
    volumes:
      - ./modbustcp.sql:/docker-entrypoint-initdb.d/init.sql
  redis:
    image: redis:5.0.6
    ports:
      - "6379:6379"
    networks:
      - tcp-modbus
  rabbit:
    image: "rabbitmq"
    environment:
      RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
      RABBITMQ_DEFAULT_USER: "*"
      RABBITMQ_DEFAULT_PASS: "*"
      RABBITMQ_DEFAULT_VHOST: "/"
    ports:
    - "15672:15672"
    - "5672:5672"
    volumes:
      - "./enabled_plugins:/etc/rabbitmq/enabled_plugins"
    networks:
      - tcp-modbus
  modbus-tcp:
    image: customImage
    ports:
      - "8080:3000"
    links:
      - "db"
    volumes:
      - "./modbus.env:/usr/src/app/.env"
    networks:
      - tcp-modbus
networks:
  tcp-modbus:
    driver: bridge

我正在使用typeorm设置来自节点应用程序的连接,并且在修改应用程序之前运行良好,可能与容器的主机名有关,因为我使用localhost连接到postgresql容器。我能否以某种方式使用容器网络作为主机名连接到postgres?

EN

回答 1

DevOps用户

回答已采纳

发布于 2019-12-05 16:02:59

docker-compose包含内部DNS。在本例中,服务名称也是DNS名称。在这种情况下,数据库的DNS是db。如果将其配置为节点应用程序中的主机名,则应该能够访问数据库。

回到当时,坞式组合的wordpress实例帮助我理解了这一点。当我将WORDPRESS_DB_HOST: db:3306更改为WORDPRESS_DB_HOST: db2:3306时,wordpress无法像日志中所描述的那样访问mysql db。当它被前后更改为dbdb2时,它无法访问它,而使用db则是如此。然后,我意识到服务名称实际上被添加到内部DNS中,这些内部DNS可以由docker-compose.yml中定义的其他服务解析。

最近,我意识到使用-f运行docker和指定多个文件也可以确保将所有服务添加到内部DNS中。最初,我认为解析仅限于相同的docker-compose.yml,但可能是码头网络负责。如果多个应用程序驻留在同一个网络中,在这种情况下是默认的,那么它们可以相互解析。

票数 0
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/10030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档