本地连接

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

我想连接的 postgres 数据库在我当前的形象与 pgadmin位于我的本地机器。

我已经尝试使用 Docker 检查器尝试使用图像 ip 与我的本地 pgadmin 建立连接,但没有多少成功。我还尝试在本地配置一些端口以使连接工作。

201536 次浏览

这是一个有效的问题不知道为什么人们觉得“似乎不可能回答这个问题”。

所以,这就是我做你想做的事情的方法:

  1. 从码头中心拉明信片图像

    docker pull postgres:latest
    
  2. 使用以下命令运行容器

    docker run -p 5432:5432 postgres
    
  3. 使用 docker 的检查命令查找 IP

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

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

    telnet IP_ADDRESS 5432
    

您必须将容器中的 postgres 端口公开给您的本地系统。你可以这样运行你的容器:

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

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

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

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

  1. 拉最新的邮递员

    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. 然后安装最新版本的 pgAdmin4 Pgadmin 网站

  4. 运行 pgAdmin 4创建新服务器,输入如下 宿主: 127.0.0.1 端口号: 5432 用户名: 用户 密码: password: password 123

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

或者,您可以将 Postgres 和 Pgadmin 合并到一个 docker-compose文件中,并以用户 pgadmin4@pgadmin.org、 pwd: 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:

如果 pgAdmin 打算在同一个 Ubuntu 主机/客户机上运行,那么需要链接 postgres 容器,这样就可以通过名称解析它。

1. 运行一个明信片容器:

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,这个命令使 postgres 容器对 pgAdmin 容器可见。

我尝试并为自己工作的解决方案是创建一个 docker 组合文件,其中包含 postgres 和 pgadmin 作为服务。详情请浏览: 在 docker 中连接 pgadmin 到 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

它工作得很好! ! ! !

我把它包含在 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,密码是 xxxxxxxxx。

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

例句: docker inspect 2f50fabe8a87 | grep IPAddress

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

pgAdmin

在我的例子中,我有一个 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 中使用的数据库凭据。

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

在我的例子中,我可以通过命令来解决检查我的邮政图像的问题

docker inspect CONTAINER_ID  | grep IPAddress.

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

按顺序或查找容器的 IP,请使用以下命令

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

参考资料: 如何从主机获得一个 Docker 容器的 IP 地址

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

检查集装箱编号:

docker ps

要检查容器的正确 IP:

docker inspect <ID_CONTAINER> | grep "IPAddress"

使用 Docker 的 PostgreSQL 和 PgAdmin 的配置都很简单,如果不正确,我建议从头开始重做配置,如果您的问题更严重的话。

下面是我为解决这个问题而开发的一个脚本。 Script-sh/install-docker-postgres-and-pgadmin

您也可以创建一个 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. 保存

上面使用的 Hostname/address 是 --name pg给出的 Postgres 容器的名称

postgrespgadmin4的 macOS IP 与 docker inspect提供的不同。 类型

docker-machine ls

看一下左边的服务器名称,默认是 default

docker-machine ip default将 IP 你需要使用的 都有pgadmin4在浏览器和 pgadmin4设置的 postgres

如果您验证 PostgreSQL 正在运行,并且您可以在那里连接到 PgAdmin 的本地副本..。

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

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

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

这个问题的解决办法已经得到了人们的回答

docker inspect CONTAINER_ID

但是在运行这个命令时,我得到了很多日志,比如 主机配置 配置 网络设置等等,所以我很困惑在 PgAdmin连接中应该添加哪个 IPAddress,因为我在日志中尝试了 0.0.0.0和 config、 host、 networkSettings 不同的 -2 IPAddress,但是在尝试了很多之后,它终于工作了。

它与哪个 IP 工作,我们必须添加网络 IP 地址(我们创建连接 PostgresPgAdmin。)

就像我跑步的时候

Docker 检查 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": "",

因此,我们必须添加网络设置-> 网络-> Postgres (我创建的网络)-> IPAddress,即“ IPAddress”: “192.168.16.2”。

添加这个 ip 后,它将工作。

希望能有所帮助。

这对我在 Ubuntu18上很有用:

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-单击 Servers > > Create > > Server..。

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

主机名: 来自3的 IP

用户名: 用户

密码: 密码123

7-点击保存,现在一切都应该工作正常。

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

是否使用 WindowSubSystemLinuxWSL2运行 Docker 和 PgAdmin? 我建议的步骤类似于人们建议的,在我的例子中我使用的是窗口环境

第一步: 打开 CMD,键入 ipconfig,然后按回车键。

步骤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 并创建一个服务器

第四步:

// 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)

我花了两天时间来找出问题所在,希望有人能帮上忙

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

当您启动容器时,您有它的网络别名。只需在 pgadmin UI 中使用这个别名。 比如,如果你有以下的 docker 组合配置:

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

您可以添加主机名为 postgres的服务器

enter image description here

我没有从 0.0.0:9090上的浏览器连接到我的容器 pg(dpage/pgadmin4 image)。

我运行这个命令:

docker run --name pg -p 9090:9090 -e PGADMIN_DEFAULT_EMAIL='faizan' -e PGADMIN_DEFAULT_PASSWORD='faizan'  -d dpage/pgadmin4

解决方案一:

首先,我试图检查容器的 IP 地址

docker inspect pg

我得到了集装箱的 IP 地址 "IPAddress": "172.17.0.3"http://172.17.0.3:9090无法访问。

解决方案二:

然后,我运行命令而没有解除附加模式(- d 删除)

docker run --name pg -p 9090:9090 -e PGADMIN_DEFAULT_EMAIL='faizan' -e PGADMIN_DEFAULT_PASSWORD='faizan' dpage/pgadmin4
# Output, it should be running on 9090.
Listening at: http://[::]:80

-p 9090:9090不起作用。

最终我找到了解决办法:

在一些不支持扩展属性的文件系统上,它可以 如果不指定 pgAdmin 的值,则不可能运行 pgAdmin PGADMIN _ LISTEN _ PORT 大于1024。在这种情况下,指定 在启动容器时,通过添加 环境变量,例如:

- e‘ PGADMIN _ LISTEN _ PORT = 5050’

不要忘记相应地调整任何主机-容器端口映射。

阅读更多关于它的官方文件

我加入了 -e 'PGADMIN_LISTEN_PORT=9090'并为我工作。

你可以尝试这两种解决方案,它一定会为你工作。

我运行这个,它为我工作

docker pull dpage/pgadmin4
docker run -p 9000:80 -e 'PGADMIN_DEFAULT_EMAIL=test@gmail.com' -e 'PGADMIN_DEFAULT_PASSWORD=root' -d dpage/pgadmin4

如果你使用的是 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:

连接:

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

端口: 5432

用户名: postgres

资料库: postgres

密码: changeme

返回文章页面我在蒙特雷成功地运行了 macOS (M1)的 Docker 桌面译者:

  1. 拉动最新的邮递员:

docker pull postgres

  1. 运行 Postgres 容器:

docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name postgres-server -p 5432:5432 --restart=always postgres

  1. 然后从 pgAdmin 网站安装最新版本的 pgAdmin 4(macOS)

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

PgAdmin 4: 连接 postgres-server

在麦克身上做过测试

PgAdmin-4 : 版本6.12

我在这里和其他地方尝试了几个答案,但都不管用。

这是我遇到的问题和解决办法。 我有一个 docker postgres 运行我的机器,需要在 pgAdmin 连接这个服务器。

我所需要做的就是检查 docker 信息,并基于 pgAdmin 中的信息填充服务器配置。

您可以通过打开您的 Docker 并转到 dashboard,然后选择您正在使用的 postgres 图像来实现这一点。有一个标签称为 Inspect点击那。在这里你可以得到所有的信息,关于邮政集装箱。

现在打开 pgAdmin并通过右键单击 Server-> Register-> Server 来抵制服务器。

为服务器选择一个名称并单击 Connection选项卡。 这里我们需要填写主机名/地址、 IP、端口等数据。

在 docker Inspect选项卡中,有一个 Ports部分,你可以从中获得这些数据,比如:

ports

所以基于这张图片的主机地址是 172.0.0.1,端口是 5873。 其他信息,如数据库,用户和密码也可在 Environment节中的多克 Inspect选项卡。

现在填写其他信息,单击 pgAdmin 中的 save,它应该可以工作。

以下是对我起作用的全部步骤

  1. 下载并安装 < a href = “ https://www.pgadmin.org/Download/”rel = “ nofollow norefrer”> pgadmin GUI tool

  2. 运行码头集装箱: docker-compose up my-db

从这个命令日志中,记下 ipv4 addressport。在我的例子中,是 0.0.0.05432

enter image description here

  1. 打开 docker-compose.yml文件并记下 POSTGRES 密码

enter image description here

  1. 打开 pgadmin gui
  • 输入名字

enter image description here

在连接选项卡:

  • Hostname/address中输入 ipv4 address
  • 输入 port
  • password中输入 POSTGRES PASSWORD
  • 拯救。

enter image description here

转到 Docker 桌面上的容器终端,键入 hostname -I,以防 Linux 将 IP 分配给这台机器,然后转到 pgAdmin 进行尝试。@ Rigoxls

Docker Desktop