我试图使用docker-组合从节点应用程序容器连接到postgresql容器,但我无法做到这一点。这是我的docker-compose.yml文件:
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?
发布于 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
。当它被前后更改为db
和db2
时,它无法访问它,而使用db
则是如此。然后,我意识到服务名称实际上被添加到内部DNS中,这些内部DNS可以由docker-compose.yml中定义的其他服务解析。
最近,我意识到使用-f
运行docker和指定多个文件也可以确保将所有服务添加到内部DNS中。最初,我认为解析仅限于相同的docker-compose.yml,但可能是码头网络负责。如果多个应用程序驻留在同一个网络中,在这种情况下是默认的,那么它们可以相互解析。
https://devops.stackexchange.com/questions/10030
复制相似问题