我在fedora 28操作系统上使用docker-compose up
在docker上运行postgres和pgadmin4,但在从pgadmin的Web控制台创建新的数据库服务器时遇到问题。
这是我正在使用的docker-compose.yml
文件。
version: '3.0'
services:
db:
image: postgres:9.6
ports:
- 5432:5432/tcp
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin
- POSTGRES_DB=mydb
pgadmin:
image: dpage/pgadmin4
ports:
- 5454:5454/tcp
environment:
- PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
- PGADMIN_DEFAULT_PASSWORD=postgres
- PGADMIN_LISTEN_PORT=5454
我应该在Create new server
> 连接标签>“主机名/地址”字段中写什么?如果我输入localhost
或127.0.0.1
会收到错误消息(无法连接,请参阅screenshot1和screenshot2)。如果我键入 db (yml
文件中指定的服务名称),则只有pgadmin接受它,并使用名为 mydb 的postgres数据库创建数据库服务器。 。
为什么?如何找到地址字段中的IP?
此外,在Fedora28上:
$ netstat -napt | grep LIST
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN -
tcp6 0 0 :::5454 :::* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
$
答案 0 :(得分:0)
通过阅读文档并亲自进行测试,您正在正确地使用docker-compose yml文件中的数据库服务名称作为pgAdmin中的“主机名/地址”字段值。
https://docs.docker.com/compose/networking/
在您的“ pgadmin”部分中,我将使用8080或80的端口值,为什么是5454?
答案 1 :(得分:0)
我最近也遇到了这个问题。我发现了两种方法:
1)See here。基本上,您只需搜索postgres容器的IP地址,然后在pgadmin4中使用该IP地址:
string query = $@" SELECT u.*
FROM (
VALUES {string.Join(",", ids.Select(id => $"({id})"))}
) AS Ids(Id)
JOIN dbo.Users u ON u.Id = Ids.Id";
在我的情况下,postgres容器ID为$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
194d4a5f9dd0 dpage/pgadmin4 "/entrypoint.sh" 48 minutes ago Up 48 minutes 443/tcp, 0.0.0.0:8080->80/tcp docker-postgis_pgadmin_1
334d5bdc87f7 kartoza/postgis:11.0-2.5 "/bin/sh -c /docke..." 48 minutes ago Up 48 minutes (healthy) 0.0.0.0:5432->5432/tcp docker-postgis_db_1
。然后寻找IP地址:
334d5bdc87f7
当我在pgadmin4中使用$ docker inspect 334d5bdc87f7 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.18.0.2",
时,我已连接到数据库!是的!
2)第二种方法更容易。我没有使用172.18.0.2
或localhost
或127.0.0.1
,而是在本地网络中使用了IP地址(在您的情况下,{em>例如是::1
?)。之后,我连接到了postgres容器!