我用nginx,php和postgres创建了一个ubuntu图像。
我想将当前映像中的postgres数据库与pgadmin
本地计算机上的数据库连接。
我尝试使用docker inspector尝试使用图像ip与我的本地pgadmin建立连接,但没有成功。我还尝试在本地配置一些端口以使连接正常工作。
我用nginx,php和postgres创建了一个ubuntu图像。
我想将当前映像中的postgres数据库与pgadmin
本地计算机上的数据库连接。
我尝试使用docker inspector尝试使用图像ip与我的本地pgadmin建立连接,但没有成功。我还尝试在本地配置一些端口以使连接正常工作。
Answers:
这是一个有效的问题,不知道为什么人们会觉得“似乎无法回答这个问题”。
所以,这就是我要做的事情:
从Docker Hub提取postgres图像
docker pull postgres:latest
使用以下命令运行容器
docker run -p 5432:5432 postgres
使用docker的inspect命令查找IP
使用该IP,PORT,用户名和密码连接PGADMIN
您还可以像下面这样做一个简单的telnet,以确认是否可以访问docker postgres容器:
telnet IP_ADDRESS 5432
-p 5432:5432
,那么你并不需要找到容器的IP,你可以用你的主机IP,或者127.0.0.1
只是或者localhost
我在运行Windows 1.12.6(9655)的docker的Windows 10上成功完成的操作如下:
拉最新的postgres
docker pull postgres:latest
运行postgres容器:
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
然后从pgadmin网站安装了最新版本的pgAdmin4
运行pgAdmin 4创建新服务器,并输入以下内容主机:127.0.0.1端口:5432用户名:用户密码:password123
或者,您可以将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:
docker network ls
,您会看到一个从postgres到pgadmin网络的桥梁(我的是postgres_postgres)。然后,您可以docker network inspect postgres_postgres
看到两个容器,每个容器都有一个ip / hostname。从Postgres中获取一个(我的名字是postgres_db_1),以从pgAdmin成功连接。
这就是我所做的
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
docker run -p 5050:80 -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin" -d dpage/pgadmin4
host: host.docker.internal
database: postgres
user: postgres
password: admin
效果很好!!!!!
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
就我而言,我可以解决通过命令检查我的postgre图像的问题
docker inspect CONTAINER_ID | grep IPAddress.
因此,我使用了docker ip地址来配置pgadmin 4连接,一切都很好。感谢@Afshin Ghazi
如果pgAdmin打算在同一Ubuntu主机/ guest上运行,则需要链接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
用作服务器名称
请注意--link some-postgres
何时启动pgAdmin。该命令使pgAdmin容器对postgres容器可见。
Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link.
我也没有运气--link
让pgadmin容器与postgres容器通信。我可以从pgadmin的本地安装访问postgres。
我将其包含在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中使用的数据库凭据:
localhost
不起作用。
就我而言,我有一个PostgreSQL容器,所以我没有更改容器或创建docker-compose方法,几个月后我需要pgadming安装PostgreSQL,所以这是我的方法:
docker inspect my_container_id_postgreSQL
分配给PostgreSQL的网络是:
“网络”:{“ docker_default”:{“ IPAddress”:“ 172.18.0.2”,...}}
用--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
将Ip地址插入pgAdmin和docker中使用的数据库凭据。
我希望这对某人有用。问候。
为了订购或找到您的容器IP,请使用以下命令
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
面对此问题两天后,我得以解决该问题。
这个问题的解决方案已经被人们喜欢做检查了
docker inspect CONTAINER_ID
但在运行此命令时,我得到一个,很多像日志主机配置 配置 网络设置等,让我糊涂了其ip地址在添加pgAdmin的连接,因为我想0.0.0.0在和配置,主机,NetworkSettings已不同-2 ip地址日志,但经过大量尝试后终于可以使用。
它与哪个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后,它将起作用。
希望对您有所帮助。
您也可以创建一个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
上面使用的主机名/地址是由给出的Postgres容器的名称 --name pg
要为您的容器找到正确的IP,请执行以下命令:
检查容器ID:
docker ps
要检查容器的正确IP:
docker inspect <ID_CONTAINER> | grep "IPAddress"
使用Docker的PostgreSQL和PgAdmin的配置都很简单,如果不正确,如果您的问题更深,我建议从头开始重做配置。
这是我为解决此问题而开发的脚本。 脚本-sh / install-docker-postgres-和-pgadmin
对于macOS,提供的IP与postgres
和提供的IPpgadmin4
不同docker inspect
。类型
docker-machine ls
看一下左侧的服务器名称。这是default
默认。
docker-machine ip default
将IP,您需要使用两个,pgadmin4
在浏览器并postgres
在pgadmin4
设置。
我尝试并为我工作的解决方案是创建一个docker compose文件,其中将postgress和pgadmin作为服务包含在内。有关更多详细信息:将pgadmin连接到docker中的postgres