首页 > 解决方案 > docker compose 内部的 Docker 通信以及与 docker 外部的数据库的通信

问题描述

我对 docker 和网络通信有点困惑。我尝试了很多东西,但没有奏效:-(。

我有以下 docker compose:

version: '3'
  services:
    nginx:
      container_name: nginx
      image: nginx:stable-alpine
      restart: unless-stopped
      tty: true
      ports:
        - 80:80
      volumes:
        - ./nginx/conf.d:/etc/nginx/conf.d:ro
      depends_on:
        - app
      networks:
        - frontend
        - backend
    app:
      restart: unless-stopped
      tty: true
      build:
        context: .
        dockerfile: Dockerfile
      container_name: app
      expose:
        - "9090"
      ports:
        - 9090:9090
      networks:
        - backend

networks:
  frontend:
  backend:

我想交流:

  1. 从 nginx 到应用程序//这可能有效
  2. 从应用程序到安装在服务器上的 postgreSQL(无 docker 容器)

我不能这样做,我尝试了很多东西,但是出了点问题:-(

标签: dockerdocker-compose

解决方案


您可以选择以下两个选项中的任何一个:

  1. 让你的 postgresql 监听你所有的网络接口(或 docker 桥以获得更安全但更复杂的设置),以实现你需要确保你的配置看起来像这样:
# grep listen /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
  1. 在 docker compose 中使用主机网络模式,它在主机网络名称空间中运行 docker,而不是创建新网络:
network_mode: "host"

推荐阅读