我按照以下说明将Rails dev环境放在一起 https://docs.docker.com/compose/rails/
它可以工作,但我无法从主机连接到Postgres服务器。我正在运行macOS High Sierra。当我运行docker container ls
时,我看到5432/tcp
作为Postgres容器的端口。请注意,5432前面没有列出IP。当我运行docker network inspect <postgress_container_ID>
时,我得到172.18.0.2作为IP。
但是当我跑psql -h 172.18.0.2 -p 5432 -U postgres
时,我得到了
xpsql: could not connect to server: Operation timed out
Is the server running on host "172.18.0.2" and accepting
TCP/IP connections on port 5432?
我做错了什么?
答案 0 :(得分:3)
通过查看您的详细信息 5432 / tcp ,在我看来,您还没有导出端口号 5432 。
如果你有导出端口,那么它应该是。
let tmpl = document.createElement('template');
tmpl.innerHTML =`<style>
div {
color: green;
display: inline;
margin: 3px;
}
p {
border: 1px solid black;
}
</style>
<p>
Hello my name is:
<div>Web</div>
<div>Component</div>
</p>`;
this.shadowRoot.appendChild(tmpl.content.cloneNode(true));
然后通过使用HOST IP地址(你的本地mac机器ip)你应该可以连接,如果仍然无法工作,请分享你的docker命令 - 你如何运行容器?
Docker撰写文件
0.0.0.0:5432->5432/tcp
在您的docker-compose文件中,您没有公开端口号5432,因此从外部您无法连接Postgres DB。
尝试在docker-compose文件中添加端口: - &#34; 5432:5432&#34; 。 然后通过使用您的机器IP地址,您应该能够连接数据库。
答案 1 :(得分:1)
默认情况下,postgres exposes port 5432。这只会将端口暴露给同一个Docker网络中的其他容器 - 即compose文件中的所有其他容器。这是因为默认情况下,docker compose creates a network表示撰写文件中的所有容器。
您可以从主机连接到容器有几个选项:
HOST:CONTAINER
格式的HOST
IP上的容器端口可用。例如,使用127.0.0.1:5432
,以便您可以访问主机上该地址的端口。172.18.0.2
,则网关可能为172.18.0.1
。通常有一种方法可以使用postgres和socket库来实现这一点,但遗憾的是我无法通过psql
找到一种方法。另一种选择是从Docker网络中的容器访问它。您可以执行docker-compose run --rm db psql -h db -U postgres
运行一次性容器,其容器与db
容器具有相同的Docker镜像,并且位于同一网络中。
答案 2 :(得分:0)
使用Docker实际运行的VM的IP。您可以通过运行找到此IP:
docker-machine ip default