无法使用 pgadmin4 从 docker 连接到本地 postgres 数据库
Could not connect to local postgres DB from docker using pgadmin4
我尝试使用 pgadmin4 从 docker 连接到我的本地 postgres 数据库,但它因 unable to connect to server: timeout expired
而失败。我有我的服务器 运行,在连接到 pgadmin4 中的服务器时,我使用了 docker-compose.yml 文件中提到的相同属性。
这是我的docker-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 容器将主机地址更改为本地主机、host.docker.internal、127.0.0.1 和 IP 地址。但我每次都得到相同的结果。我还尝试将 pgadmin4 作为服务添加到我的 docker-compose.yml 文件中并尝试过,但也得到了相同的结果。
我很困惑我在这里遗漏了什么。
提前致谢。
首先,您没有从 Postgres 容器导出任何端口,默认端口可能是 5432
,然后您无法连接 8000
,因为它是从您的主机绑定到您的应用程序。
这是来自 docker-compose ports
的一些描述
When mapping ports in the HOST
:CONTAINER
format, you may experience erroneous results when using a container port lower than 60, because YAML parses numbers in the format xx:yy as a base-60 value. For this reason, we recommend always explicitly specifying your port mappings as strings.
因此您可以尝试从您的 Pgadmin 可能需要使用 5432 端口的容器中从 Postgres DB 导出端口 "5432: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=secretpassword
我尝试使用 pgadmin4 从 docker 连接到我的本地 postgres 数据库,但它因 unable to connect to server: timeout expired
而失败。我有我的服务器 运行,在连接到 pgadmin4 中的服务器时,我使用了 docker-compose.yml 文件中提到的相同属性。
这是我的docker-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 容器将主机地址更改为本地主机、host.docker.internal、127.0.0.1 和 IP 地址。但我每次都得到相同的结果。我还尝试将 pgadmin4 作为服务添加到我的 docker-compose.yml 文件中并尝试过,但也得到了相同的结果。
我很困惑我在这里遗漏了什么。
提前致谢。
首先,您没有从 Postgres 容器导出任何端口,默认端口可能是 5432
,然后您无法连接 8000
,因为它是从您的主机绑定到您的应用程序。
这是来自 docker-compose ports
的一些描述When mapping ports in the
HOST
:CONTAINER
format, you may experience erroneous results when using a container port lower than 60, because YAML parses numbers in the format xx:yy as a base-60 value. For this reason, we recommend always explicitly specifying your port mappings as strings.
因此您可以尝试从您的 Pgadmin 可能需要使用 5432 端口的容器中从 Postgres DB 导出端口 "5432: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=secretpassword