docker postgres pgadmin本地连接

Rig*_*xls 61 postgresql pgadmin docker

我用nginx,php和postgres创建了一个ubuntu图像.

我想将当前图像中的postgres数据库连接到pgadmin本地计算机上.

我尝试使用docker inspector尝试使用image ip与我的本地pgadmin建立连接,但没有太大成功.我也尝试在本地配置一些端口以使连接工作.

小智 71

这是一个有效的问题,不知道为什么人们会觉得"似乎无法回答这个问题".

所以,这就是我如何做你想做的事情:

  1. 从Docker Hub中拉出postgres图像

    docker pull postgres:latest

  2. 使用以下命令运行容器

    docker run -p 5432:5432 postgres

  3. 使用docker的inspect命令查找IP

  4. 使用该IP,PORT,用户名和密码在PGADMIN中连接

  5. 你也可以像下面这样做一个简单的telnet来确认你是否可以访问docker postgres容器:

    telnet IP_ADDRESS 5432

  • 如果您使用`-p 5432:5432`发布端口,那么您不需要找到容器的IP,您可以使用主机IP,或`127.0.0.1`或只是`localhost` (7认同)
  • 这个答案对我有用,因此这是一个有效的问题。 (6认同)
  • 我已使用 -p 5432:5432 将容器映射到我的主机,但仍然出现连接错误。我尝试使用从 docker Inspection 获得的 IPAddress,它有效。 (2认同)

Mao*_*ang 40

我在windows 10运行docker for windows 1.12.6(9655)上取得的成功,步骤如下:

  1. 拉最新的postgres

    docker pull postgres:latest

  2. 运行postgres包含器:

    docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres

  3. 然后从pgadmin网站安装了最新版本的pgAdmin4

  4. 运行pgAdmin 4创建新服务器,并输入如下主机:127.0.0.1端口:5432用户名:用户密码:password123

  5. 然后一切正常,连接到docker postgres实例成功.


Sol*_*ake 26

就我而言,我可以通过命令解决检查我的 postgre 图像的问题

docker inspect CONTAINER_ID  | grep IPAddress.
Run Code Online (Sandbox Code Playgroud)

所以,我使用 docker ip 地址来配置我的 pgadmin 4 连接,一切都很好。感谢@Afshin Ghazi


Eri*_*ngs 25

或者,您可以将Postgres和Pgadmin组合在一个docker-compose文件中,然后以用户身份登录pgadmin4@pgadmin.org,pwd : admin. 要添加Posgres服务器,请使用hostname postgres,port 5432.

version: '3'
services:
  postgres:
    image: postgres
    hostname: postgres
    ports:
      - "6543:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TEST_SM
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    depends_on:
      - postgres
    ports:
      - "5555:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
    restart: unless-stopped

volumes:
  postgres-data:
Run Code Online (Sandbox Code Playgroud)

  • 如果你“docker network ls”,你会看到一个用于 postgres-to-pgadmin 网络的桥(我的是 postgres_postgres)。然后,您可以“docker network inform postgres_postgres”并看到两个容器,每个容器都有一个 ip/主机名。从 Postgres 中获取一个(我的是 postgres_db_1),从 pgAdmin 成功连接。 (4认同)
  • 我得到“无法将主机名“postgres”翻译为地址:提供的节点名或服务名,或未知”。 (3认同)

KAR*_*LAN 22

如果您确认 PostgreSQL 正在运行,并且您可以使用 PgAdmin 的本地副本连接到那里...

答案很简单:对运行在 Docker 中的 PgAdmin使用host.docker.internalistead oflocalhost

使用 <code>host.docker.internal</code> 代替 <code>localhost</code>

  • @ali-sherafat因为docker在安装过程中将此域名添加到``/etc/hosts``` (3认同)

Afs*_*azi 16

我将其包含在 docker yaml 文件中以获取数据库和 pgAdmin:

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    expose:
      - "5432"
    ports:
      - 8000:5432
    volumes:
      - ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
      - ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454
Run Code Online (Sandbox Code Playgroud)

postgres 用户名是 alphaone,密码是 xxxxxxxxxxx。

做一个docker ps来获取容器ID,然后docker inspect <dockerContainerId> | grep IPAddress

例如: docker inspect 2f50fabe8a87 | grep IPAddress

将 IP 地址插入 pgAdmin 和 docker 中使用的数据库凭据:

管理员


Ale*_*kov 11

如果pgAdmin打算在同一Ubuntu主机/ guest上运行,则需要链接postgres容器,因此可以用名称来解决。

1.运行一个postgres容器:

docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres
Run Code Online (Sandbox Code Playgroud)

2.运行pgAdmin容器:

docker run -p 80:80 --link some-postgres -e "PGADMIN_DEFAULT_EMAIL=email@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
Run Code Online (Sandbox Code Playgroud)

3.现在,在phAdmin Web应用程序中添加新服务器时,请some-postgres用作服务器名称

请注意--link some-postgres何时启动pgAdmin。该命令使pgAdmin容器对postgres容器可见。


Tha*_*han 9

This is what i did

for postgres

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
Run Code Online (Sandbox Code Playgroud)

for pgadmin

docker run -p 5050:80  -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4
Run Code Online (Sandbox Code Playgroud)

Connection string for pgadmin

host: host.docker.internal
database: postgres
user: postgres
password: admin
Run Code Online (Sandbox Code Playgroud)

It works fine!!!!!

  • 惊人的!。很有帮助。我只需要“host.docker.internal”值 (9认同)
  • `无法连接到服务器:无法将主机名“host.docker.internal”转换为地址:再试一次` (7认同)
  • “host.docker.internal”正是我所缺少的,谢谢! (7认同)
  • host.docker.internal - 这就是我正在寻找的,谢谢 (5认同)
  • 我还使用这种方法在 docker 中创建了 postgres 和 pgAdmin。对我有用的输入值是 @SolidSnake 的答案 - /sf/answers/4075704111/ &gt; dockerspect CONTAINER_ID | grep IP 地址。并使用此结果 IP 地址作为主机 (2认同)

小智 8

面对这个问题两天后,我能够解决这个问题。

这个问题的解决方案已经得到了人们的回答,比如 do inspect

docker inspect CONTAINER_ID

但是在运行这个命令时,我得到了很多日志,比如Host Config Config Network Settings等,所以我对在pgAdmin连接中添加哪个 IPAddress 感到困惑,因为我尝试了0.0.0.0和 config、host、networkSettings 不同的 -2 IPAddress 在日志,但最终它在尝试了很多之后有效。

它适用于哪个 IP,我们必须添加该网络 IP 地址(我们创建该地址以连接postgrespgAdmin。)

就像我跑步时的情况一样:-

码头工人检查 postgres_container

 "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "5432"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/231231Ad132",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "postgres": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "postgres",
                    "0e2j3bn2m42"
                ],
                "NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
                "EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
                "Gateway": "192.168.16.1",
                "IPAddress": "192.168.16.2",
                "IPPrefixLen": 20,
                "IPv6Gateway": "",
Run Code Online (Sandbox Code Playgroud)

所以我们必须添加 NetworkSettings -> Network -> Postgres(mine created network) -> IPAddress ie "IPAddress": "192.168.16.2"。

添加此IP后,它将起作用。

我希望它会有所帮助。


Ami*_*Gol 7

这在 Ubuntu 18 上对我有用:

1- 运行一个 postgres 容器

docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name my-postgres -p 5432:5432 postgres
Run Code Online (Sandbox Code Playgroud)

2- 运行 pgAdmin 容器

docker run --rm -p 5050:5050 thajeztah/pgadmin4
Run Code Online (Sandbox Code Playgroud)

3- 获取您的本地 IP(在 Ubuntu 中通过ifconfig命令)

4-在浏览器中打开localhost:5050

5- 单击服务器>>创建>>服务器...

6- 在常规选项卡中,为其命名,例如:docker。在连接选项卡中,输入以下字段:

主机名:来自 3 的 IP

用户名:用户

密码:password123

7- 单击保存,现在一切正常。

注意:如果这不起作用,请尝试使用“localhost”作为主机名。


Pay*_*jad 7

如果您使用的是 Mac 和 localhost,请使用以下凭据:

version: '3.5'

services:
  postgres:
    container_name: postgres_container
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
      PGDATA: /data/postgres
    volumes:
       - postgres:/data/postgres
    ports:
      - "5432:5432"
    networks:
      - postgres
    restart: unless-stopped
  
  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-pgadmin4@pgadmin.org}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
       - pgadmin:/var/lib/pgadmin

    ports:
      - "${PGADMIN_PORT:-5050}:80"
    networks:
      - postgres
    restart: unless-stopped

networks:
  postgres:
    driver: bridge

volumes:
    postgres:
    pgadmin:
Run Code Online (Sandbox Code Playgroud)

联系:

主机名/地址:host.docker.internal0.0.0.0

港口:5432

用户名:postgres

数据库:postgres

密码:changeme


Har*_*lid 6

为了或查找容器的 IP,请使用以下命令

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Run Code Online (Sandbox Code Playgroud)

参考:如何从主机获取Docker容器的IP地址


mei*_*eij 5

您必须将容器中的 postgres 端口公开给本地系统。您可以通过像这样运行容器来完成此操作:

docker run -p 5432:5432 <name/id of container>

当与 GUI 客户端或 CLI 连接时,请确保使用 ip 地址而不是 localhost,即使您的 ip 地址是 localhost ip 地址。

docker ps会给你 postgres 容器所在的 IP 地址。


hiz*_*rck 5

就我而言,我有一个 PostgreSQL 容器,所以我没有更改我的容器或创建 docker-compose 方法,几个月后我需要 pgadming 安装 PostgreSQL,所以这是我的方法:

  1. docker inspect my_container_id_postgreSQL
  2. 分配给 PostgreSQL 的网络是:

    "网络": { "docker_default": { "IPAddress": "172.18.0.2", ... } }

  3. --network命令运行我的 PGADMIN 。

    docker run -p 85:80 --network docker_default -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' -d dpage/pgadmin4

  4. 将 IP 地址插入 pgAdmin 和 docker 中使用的数据库凭据。

我希望这对某人有用。问候。


Ser*_*nin 5

当您启动容器时,您就有了它的网络别名。只需在 pgadmin UI 中使用此别名即可。就像如果您有以下 docker compose 配置:

version: "3.5"
services:
  postgres:
    container_name: postgres-14
    image: postgres:14.1
    restart: unless-stopped
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_PASSWORD=root
      - POSTGRES_USER=postgres
    hostname: postgres
  pgadmin:
    container_name: pgadmin4
    image: dpage/pgadmin4
    restart: unless-stopped
    ports:
      - "80:80"
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - PGADMIN_DEFAULT_EMAIL=user@domain.com
      - PGADMIN_DEFAULT_PASSWORD=admin
    hostname: pgadmin
Run Code Online (Sandbox Code Playgroud)

您可以使用主机名添加服务器:postgres

在此输入图像描述