跨Docker Compose文件:解决server服务无法访问db服务5432端口问题
问题:Docker Compose跨文件服务无法访问数据库端口
我有两个Docker Compose文件,希望让server服务访问db服务的5432端口。已将两个服务加入同一个共享网络custom_network,db服务已暴露5432端口,但server服务仍无法访问该端口。另外由于5432端口已被db服务映射到主机,无法在server服务中创建5432:5432的端口映射。
file1.yaml
version: '3.9' services: db: image: library/postgres:13-alpine container_name: local-dev-db depends_on: cloudsql-proxy: condition: service_started environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=postgres - PGUSER=postgres ports: - 5432:5432 # host port:container port expose: - 5432 networks: - custom_network networks: custom_network: name: custom_network
file2.yaml
version: '3.9' services: server: image: custom:latest container_name: django-runserver tty: true volumes: - ../:/code/project working_dir: /code/project command: bash -c "python3 manage.py runserver" networks: - custom_network ports: - 8000:8000 # network_mode: host # works on Linux, not mac networks: custom_network: external: name: custom_network
解决方案
- 修正数据库连接地址:同一Docker网络内,容器间访问无需依赖主机端口映射。server服务连接数据库时,不要用
localhost:5432,改用服务名db:5432或容器名local-dev-db:5432即可。 - 检查依赖服务状态:file1.yaml中db服务依赖
cloudsql-proxy,但当前文件未定义该服务。若不需要云代理,直接删除depends_on配置;若需要则确保cloudsql-proxy服务正常启动。 - 验证网络关联:执行命令
docker network inspect custom_network,确认db和server容器都已加入该网络。 - 确认数据库服务正常:执行
docker logs local-dev-db,查看日志中是否出现database system is ready to accept connections,确保PostgreSQL服务已正常启动并监听5432端口。
内容的提问来源于stack exchange,提问作者Aseem
相关产品推荐
相关产品推荐

