【发布时间】:2018-01-19 12:29:32
【问题描述】:
我正在使用以下命令创建一个 PostgreSQL 容器:
docker run -p 5432:5432 -e POSTGRES_PASSWORD=123456789 -d postgres:9.3.6
它将下载所需的基础镜像,并创建一个容器。
当我使用 telnet 检查服务连接时,我得到:
$ telnet 127.0.0.1 5432
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
使用127.0.0.1作为IP地址可以正常工作,但是如果我使用我电脑的IP地址,控制台会卡住,过了很长时间它给我一个超时错误。
$ telnet 191.115.52.110 5432
Trying 191.115.52.110...
telnet: Unable to connect to remote host: Connection timed out
我应该怎么做才能让我的 PostgreSQL 容器可以从任何 IP 访问?
我尝试过像这样传递配置属性。但是,当我这样做时,容器会立即退出(可能会崩溃)。
docker run -p 5432:5432 -e POSTGRES_PASSWORD=123456789 -d postgres:9.3.6 -c "listen_addresses = '*'"
当我执行show listen_addresses 获取listen_addresses 运行时属性时,我得到* 这意味着该参数已正确设置为*,但它仍然不起作用。
postgres=# show listen_addresses;
listen_addresses
------------------
*
(1 row)
【问题讨论】:
-
如果您在没有
-d的情况下运行相同的命令,您至少可以看到错误消息,以便进行故障排除(下面的答案几乎可以肯定是实际问题,只是认为这会有所帮助) -
"listen_addresses='*'" 不能包含空格字符
标签: postgresql docker containers dockerfile