楼主:
yoz4ni (yoooooz)
2020-09-07 00:37:04请问一下
我创建了 postgres 的容器,然后写了一个 python 的程式去连接这个数据库(python 的程式一样在 docker 上)
然后我目前是使用 docker build run 的方式去启动,但是如果我连数据库的 IP 填 127.0.0.1 的话会无法连线,如果改成了数据库容器里的 IP(这里是 172.17.0.2) 就可以成功,为什么阿?
但是当我换成用 docker-compose 执行时,使用 127.0.0.1 跟 172.17.0.2 都失败,反而使用电脑的IP(192.168.0.102(跑在虚拟机上)),就可以连成功?
请问问题出在哪里啊? 我找资料找了一整天找不到类似的文章,来这里问问大神
这是我写的 Dockerfile 和 docker-compose.yml 内容:
https://pastebin.com/iNC1tFPn
感谢帮忙!!!
作者: MARGHT 2020-09-07 00:40:00
dbhost 改 db
作者:
ldkrsi (衰神)
2020-09-07 00:57:00最简单的说 网络也是虚拟化出来的 一切和你想的不同docker compose中name可以当domain用 也就是一楼讲的改法
你要了解 docker network 的部分 容器的 127.0.0.1 是他自己 不是 host 然后你用容器的 IP 172.X.X.X 应该是可以的 你可能要确认一下用 docker-compose 跑起来的容器IP 是多少 最后 正规的容器连容器的方式是用容器的名称当作 domain name 去连
作者: ga013077 (Daky) 2020-09-07 09:14:00
你第一种的docket run想要用127.0.0.1:5432连线的话 参数要加--network host把network接到host上应该就可以了关键字用docker compose network去搜会找到很多说明的文章看完你就会懂了不懂再站内
楼主:
yoz4ni (yoooooz)
2020-09-07 10:10:00感谢各位,我先去了解了解阿一楼说的改成db指的是 Dockerfile 里面 ENV 的 DBHOST吗
作者: l7th (1931) 2020-09-07 12:05:00
用dc时, 在auth里面db这个hostname会被resolve到db container. 所以你直接把py里面的hostname改成db就可以了另外用dc时, 因为你把5432 map到db container的5432, 所以你也可以用host.docker.internal:5432来连.
作者:
wwwc (...... )
2020-09-07 14:41:00对的 ENV DBHOST db
作者:
pttano (pttano)
2020-09-09 19:53:00去把cgroup弄懂
作者:
chan15 (ChaN)
2020-09-10 16:14:00你有写 container name 那连结方式用该 name 就好啦除非你绑死不然 container restart 的时候 IP 是有可能变