首页 > 解决方案 > 无法从 docker 容器连接到本地 postgres

问题描述

我有一些 docker 容器,例如 php、nginx 等。A 在本地也有 postgres,因为我了解到 docker 容器内的 dabatase 是一种不好的做法。但我无法从 docker 容器连接到本地 postgres。

此刻我已经做了下一个

postgresql.conf我改变了listen_addresses

listen_addresses = '*'

pg_hba.conf我添加了下一行

host    all     all     0.0.0.0/0       md5

我为 iptables 执行了下一个命令

iptables -I INPUT -p tcp -m tcp -s 0.0.0.0 --dport 5432 -j ACCEPT

然后我重新启动了postgres。

我的数据库配置

DB_CONNECTION=pgsql
DB_HOST=my_server_ip_address
DB_PORT=5432
DB_DATABASE=mydbname
DB_USERNAME=mydbuser
DB_PASSWORD=mydbpasswd

但我仍然无法连接到 posgresql。同时我可以通过 psql 或 phpstorm 连接到 postgres

我的 docker-compose.yml

version: '3.7'

networks:
  backend-network:
    driver: bridge
  frontend-network:
    driver: bridge

services:
  &app-service app: &app-service-template
    container_name: k4fntr_app
    build:
      context: ./docker/php-fpm
      args:
        UID: ${UID?Use your user ID}
        GID: ${GID?Use your group ID}
        USER: ${USER?Use your user name}
    user: "${UID}:${GID}"
    hostname: *app-service
    volumes:
      - /etc/passwd/:/etc/passwd:ro
      - /etc/group/:/etc/group:ro
      - ./:/var/www/k4fntr
    environment:
      APP_ENV: "${APP_ENV}"
      CONTAINER_ROLE: app
      FPM_PORT: &php-fpm-port 9000
      FPM_USER: "${UID:-1000}"
      FPM_GROUP: "${GID:-1000}"
    networks:
      - backend-network

  &queue-service queue:
    <<: *app-service-template
    container_name: k4fntr_queue
    restart: always
    hostname: *queue-service
    depends_on:
      - app
    environment:
      CONTAINER_ROLE: queue

  &schedule-service schedule:
    <<: *app-service-template
    container_name: k4fntr_schedule
    restart: always
    hostname: *schedule-service
    depends_on:
      - app
    environment:
      CONTAINER_ROLE: scheduler

  &sportlevel-listener sportlevel_listener:
    <<: *app-service-template
    container_name: k4fntr_sl_listener
    restart: always
    hostname: *sportlevel-listener
    ports:
      - "${SPORTLEVEL_LISTEN_PORT}:${SPORTLEVEL_LISTEN_PORT}"
    depends_on:
      - app
    environment:
      CONTAINER_ROLE: sl_listener

  &php-fpm-service php-fpm:
    <<: *app-service-template
    container_name: k4fntr_php-fpm
    user: 'root:root'
    restart: always
    hostname: *php-fpm-service
    ports: [*php-fpm-port]
    entrypoint: /fpm-entrypoint.sh
    command: php-fpm --nodaemonize
    networks:
      - backend-network
      - frontend-network

  echo-server:
    container_name: k4fntr_echo
    image: oanhnn/laravel-echo-server
    volumes:
     - ./:/app
    environment:
      GENERATE_CONFIG: "false"
    depends_on:
      - app
    ports:
      - "6001:6001"
    networks:
      - backend-network
      - frontend-network

  nginx:
    container_name: k4fntr_nginx
    image: nginx
    volumes:
    - ./docker/nginx/config:/etc/nginx/conf.d
    - ./:/var/www/k4fntr
    depends_on:
      - *php-fpm-service
    ports:
      - "${NGINX_LISTEN_PORT}:80"
    networks:
      - frontend-network

  redis:
    container_name: k4fntr_redis
    image: redis
    restart: always
    command: redis-server
    volumes:
      - ./docker/redis/config/redis.conf:/usr/local/etc/redis/redis.conf
      - ./docker/redis/redis-data:/data:rw
    ports:
      - "16379:6379"
    networks:
      - backend-network

标签: postgresqldocker

解决方案


推荐阅读