如何将本地Symfony项目连接到远程Docker PostgreSQL服务
如何从本地连接远程Docker部署的PostgreSQL数据库
环境详情
远程服务器上已部署Docker化开发环境,运行的容器列表如下:
iig_docker_postgres_adminer entrypoint.sh docker-php-e ... Up 0.0.0.0:8081->8080/tcp iig_docker_postgres_nginx /docker-entrypoint.sh ngin ... Up 443/tcp, 0.0.0.0:8080->80/tcp iig_docker_postgres_php docker-php-entrypoint php-fpm Up 9000/tcp iig_docker_postgres_postgres_database docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp
开发栈可通过以下地址访问:http://syy0ana001.hpmetier.sf.intra.laposte.fr:8080
PostgreSQL的Dockerfile内容:
FROM postgres:12
docker-compose.yml中database服务的配置(其中POSTGRES_PORT=5432):
database: container_name: ${COMPOSE_PROJECT_NAME}_postgres_database build: context: ./postgres hostname: database restart: unless-stopped environment: POSTGRES_USER: user POSTGRES_PASSWORD: admin POSTGRES_DB: dbtest ports: - "${POSTGRES_PORT}:5432" volumes: - ./postgres/local_pgdata:/var/lib/postgresql/data networks: - symfony
已尝试的无效配置
- 使用远程服务器URL配置
DATABASE_URL(错误:URL格式冗余,包含http://前缀,且账号与容器配置不符):
DATABASE_URL="postgresql://root:124524..@http://syy0ana001.hpmetier.sf.intra.laposte.fr:5432/dbtest?serverVersion=12&charset=utf8
- 使用容器内网IP配置(错误:容器内网IP仅在远程服务器的Docker网络内可访问,本地机器无法直接连通):
DATABASE_URL="postgresql://user:admin@192.168.96.5:5432/dbtest?serverVersion=12&charset=utf8"
volumes: symfony_dockerized_app_sync: db_app: networks: symfony: driver: bridge external: true
正确解决方案
1. 修正DATABASE_URL格式
PostgreSQL连接URL不需要http://前缀,直接使用远程服务器的域名/IP,同时匹配容器配置的账号密码:
DATABASE_URL="postgresql://user:admin@syy0ana001.hpmetier.sf.intra.laposte.fr:5432/dbtest?serverVersion=12&charset=utf8"
2. 确保远程服务器端口开放
- 检查远程服务器防火墙(如
ufw、iptables),确认5432端口已开放,允许本地机器IP访问。 - 若为内网环境,确保本地机器与远程服务器在同一内网,能正常解析
syy0ana001.hpmetier.sf.intra.laposte.fr域名,或直接替换为远程服务器的内网IP。
3. 先验证基础连通性
在本地用psql命令测试连接,确认网络和账号无问题:
psql -h syy0ana001.hpmetier.sf.intra.laposte.fr -p 5432 -U user -d dbtest
输入密码admin后若能进入PostgreSQL命令行,说明连接正常,再将该配置同步到Symfony项目即可。
内容的提问来源于stack exchange,提问作者Khaled Boussoffara
相关产品推荐
相关产品推荐

