我尝试使用pgadmin4连接本地postgres,但是unable to connect to server: timeout expired失败了。我的服务器正在运行,在连接到pgadmin4中的服务器时,我使用了与docker-come.yml文件中提到的相同的属性。
这是我的船坞-Compose.yml
version: "3"
services:
web:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
environment:
- DB_HOST=db
- DB_NAME=app
- DB_USER=postgres
- DB_PASS=secretpassword
depends_on:
- db
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secretpassword这是我在pgadmin4中遇到的错误的屏幕截图

我试图通过检查docker容器将主机地址更改为localhost、host.docker.internal、127.0.0.1和IPAddress。但每次我都得到同样的结果。我还尝试将pgadmin4作为服务添加到我的docker-compose.yml文件中,并进行了尝试,但也得到了相同的结果。
我搞不懂我在这里错过了什么。
提前谢谢。
发布于 2022-03-26 07:17:07
首先,您没有从Postgres容器导出任何端口(默认情况下可能是5432 ),然后无法连接8000,因为这是从主机绑定到您的应用程序的。
下面是来自docker-compose 端口的一些描述
在映射
HOSTCONTAINER格式的端口时,当使用低于60的容器端口时,可能会遇到错误的结果,因为YAML将xx:yy格式的数字解析为基-60值。因此,我们建议始终显式地将端口映射指定为字符串。
因此,您可以尝试从Postgres从容器导出端口"5432:5432",您的Pgadmin可能需要使用5432端口。
version: "3"
services:
web:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
environment:
- DB_HOST=db
- DB_NAME=app
- DB_USER=postgres
- DB_PASS=secretpassword
depends_on:
- db
db:
image: postgres:10-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secretpasswordhttps://stackoverflow.com/questions/71625983
复制相似问题