从另一个容器和本地主机连接Docker容器

时间:2019-05-23 20:27:45

标签: docker docker-compose

我有一个简单的Web应用程序,已将其配置为在Docker容器中运行。配置看起来像这样

version: '3'
services:
  service-1:
    build: service-1
    restart: unless-stopped
    ports:
      - "8080:8080"
    networks:
      - uni

  service-1-postgres:
    restart: unless-stopped
    ports:
      - "5432:5432"
    image: "postgres:11.3"
    environment:
      POSTGRES_PASSWORD: root
    networks:
      - uni

networks:
  uni:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 192.168.0.1/24

我使用192.168.0.1(网络子网)连接到另一个容器内的postgres容器。但是现在,我希望能够从IDE运行我的服务以加快开发速度,并在容器中运行db。但是现在连接到数据库失败。我如何配置我的docker-compose,使其能够使用同一主机连接到网络内部和外部(从数据库)到数据库容器。

1 个答案:

答案 0 :(得分:0)

重要的是为此进行某种实际配置。 C PostgreSQL客户端库支持标准的PGHOST环境变量,这是一个不错的选择。

在本地开发的IDE设置中,您可以设置PGHOST=localhost或不设置它。它将(从主机的角度)连接到localhost端口5432,主机上的端口5432是您为PostgreSQL容器设置的已发布端口。

相反,当您在Docker中运行此代码时,可以将PGHOST设置为另一个容器的名称,前提是两个容器都在同一非默认网络上。 Docker Compose会自动为您创建一个非默认网络,并且您不需要显示手动的网络配置。使用服务块的名称作为主机名可以访问容器。

version: '3'
services:
  service-1:
    build: service-1
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      PGHOST: service-1-postgres

  service-1-postgres:
    # as above, less the networks: block