docker postgres pgadmin本地连接

时间:2014-08-28 04:26:43

标签: postgresql docker pgadmin

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

我想将当前图片中的postgres数据库与本地计算机上的pgadmin连接起来。

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

19 个答案:

答案 0 :(得分:59)

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

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

  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

答案 1 :(得分:37)

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

  1. 拉最新的postgres

    docker pull postgres:latest

  2. 运行postgres containsner:

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

  3. 然后安装了最新版本的pgAdmin4 pgadmin website

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

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

答案 2 :(得分:15)

或者,您可以将Postgres和Pgadmin合并到一个docker-compose文件中,然后以用户pgadmin4@pgadmin.org的身份登录,密码为admin。要添加Posgres服务器,请使用主机名postgres,端口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:

答案 3 :(得分:9)

如果pgAdmin打算与同一Ubuntu主机/来宾一起运行,则需要链接postgres容器,以便可以使用名称来解决它。

1。运行一个postgres容器:

docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres

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

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

在打开pgAdmin时注意--link some-postgres。此命令使PostgreSQL容器对pgAdmin容器可见。

答案 4 :(得分:7)

这在 Ubuntu 18 上对我有用:

1- 运行 postgres 容器

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

2- 运行 pgAdmin 容器

docker run --rm -p 5050:5050 thajeztah/pgadmin4

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

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

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

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

<块引用>

主机名:来自 3 的 IP

用户名:用户

密码:password123

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

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

答案 5 :(得分:5)

如果您确认PostgreSQL正在运行,则可以在那里与PgAdmin的本地副本连接...

答案很简单:对于运行在Docker中的PgAdmin,使用host.docker.internal而不是localhost

use <code>host.docker.internal</code> istead of <code>localhost</code>

答案 6 :(得分:4)

您必须将容器中的postgres端口暴露给本地系统。你可以通过像这样运行容器来实现这个目的:

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

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

docker ps将为您提供postgres容器所在的IP地址。

答案 7 :(得分:3)

这就是我所做的

对于postgres

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres

用于pgadmin

docker run -p 5050:80  -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4

pgadmin的连接字符串

host: host.docker.internal
database: postgres
user: postgres
password: admin

工作正常!!!!

答案 8 :(得分:3)

我将其包含在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

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

执行docker ps获取容器ID,然后docker inspect <dockerContainerId> | grep IPAddress

例如:docker inspect 2f50fabe8a87 | grep IPAddress

将Ip地址插入pgAdmin中,并在docker中使用数据库凭据:

pgAdmin

答案 9 :(得分:3)

面对此问题两天后,我得以解决该问题。

这个问题的解决方案已经像“检查”这样的人们回答了

docker inspect CONTAINER_ID

但是在运行此命令时,我收到了很多日志,例如主机配置 配置 网络设置等,所以我很困惑哪个IP地址添加 pgAdmin 连接,因为我尝试了 0.0.0.0 并在日志中配置,主机,networkSettings不同的-2 IPAddress,但最终在尝试了很多之后才可以使用。 / p>

它与哪个IP一起工作,我们必须添加该网络ip地址(我们创建该IP地址是为了连接 postgres pgAdmin 。)

就像我跑步时的情况:-

泊坞窗检查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": "",

所以我们必须添加NetworkSettings-> Network-> Postgres(由我创建的网络)-> IPAddress,即“ IPAddress”:“ 192.168.16.2”。

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

我希望这会有所帮助。

答案 10 :(得分:2)

对于我来说,我可以通过命令

解决检查我的postgre图像的问题
docker inspect CONTAINER_ID  | grep IPAddress.

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

答案 11 :(得分:2)

您也可以创建一个Docker桥接网络来做到这一点。

$ docker network create pgnet
a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f

$ docker run --detach \
    --name pg \
    --network pgnet \
    --publish 5432:5432 \
    --restart always \
    --env POSTGRES_PASSWORD=pg123 \
    --volume ${PWD}/data:/var/lib/postgresql/data \
    postgres:12.1
b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899

$ docker run --detach \
    --name pgadm \
    --network pgnet \
    --publish 8000:80 \
    --volume ${PWD}/pgadmin:/var/lib/pgadmin \
    --env PGADMIN_DEFAULT_EMAIL=user@domain.com \
    --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
    dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312

打开http://localhost:8000/

  1. 点击添加新服务器
  2. 创建-服务器
    1. 名称:db
    2. 主机名/地址:pg
    3. 用户名:postgres
    4. 密码:pg123
  3. 保存

上面使用的主机名/地址是--name pg

指定的Postgres容器的名称

答案 12 :(得分:2)

就我而言,我有一个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地址和docker中使用的数据库凭据插入pgAdmin。

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

答案 13 :(得分:1)

要为您的容器找到正确的IP,请执行以下命令:

检查容器ID:

docker ps

要检查容器的正确IP:

docker inspect <ID_CONTAINER> | grep "IPAddress"

使用Docker进行PostgreSQL和Pg​​Admin的配置都很简单,如果不正确,如果您的问题更深,我建议从头开始重做配置。

这是我为解决此问题而开发的脚本。 script-sh/install-docker-postgres-and-pgadmin

答案 14 :(得分:1)

对于macOS IP postgrespgadmin4docker inspect提供的IP地址不同。 输入

docker-machine ls

看看左侧的服务器名称。默认为default

docker-machine ip default将需要IP用于浏览器中的{strong>两者,pgadmin4postgres设置中的pgadmin4

答案 15 :(得分:0)

要订购或找到容器的IP,请用户按照以下命令

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

引荐来源:How to get a Docker container's IP address from the host?

答案 16 :(得分:0)

我尝试并为我工作的解决方案是创建一个docker compose文件,其中将postgress和pgadmin作为服务包含在内。有关更多详细信息:Connecting pgadmin to postgres in docker

答案 17 :(得分:0)

您是否使用 Window Subsystem LinuxWSL2 来运行 Docker 和 PgAdmin? 我建议的步骤类似于人们建议的步骤。就我而言,我使用的是窗口环境

第 1 步: 打开 CMD 并输入 ipconfig 并按 Enter。

第 2 步:检查 WSL IPv4 Adress

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : 3bd9::997b:b52a::fe80::65b3%63
   IPv4 Address. . . . . . . . . . . : 172.172.172.1  // use the IP as host/address
   Subnet Mask . . . . . . . . . . . : 255.255.255.255

第 3 步: 从浏览器中打开 PgAdmin 并创建服务器

第 4 步:

// Here it depends on your desired config mine is the following

Server: postgres
host address:  IPv4 Address(step 2)
username: postgress(username for postgress)
password: password(password for postgress)

我花了两天时间弄清楚出了什么问题,希望有人会觉得有帮助

答案 18 :(得分:0)

如果本地主机端口 5432 已被其他 psql 服务器使用,请在创建容器和 Pgadmin 时更改它。 screen