如何从容器内部访问主机上运行的数据库?

我运行我的应用程序内容器和地图8080 – > 5000,它的工作原理。 但是我想访问Postgres数据库运行ON HOST系统,而不是在其他容器内。 假设pg在postgres://localhost:5434/mydb运行postgres://localhost:5434/mydb – 如何从我的应用程序容器连接到该数据库?

这是我的docker-compose.yml

 web: image: myprofile/myimage:latest ports: - 8080:5000 

不幸的是,这个问题没有一个简单的答案。

基本上你有两个select:

1)使用volumes使容器中的套接字可用。

数据库(如postgres和mysql)支持监听unix域套接字而不是TCP套接字。 这里的优点是你可以通过一个卷装载docker run -v将unix域套接字转发到一个容器中

2)使用socat从主机中提供一个localhost(127.0.0.1)tcp连接

对于只有TCP套接字的应用程序,我只是将socat放入图像中,并在容器内的后台启动它(让它在127.0.0.1上侦听,并转发到指定的套接字)。

主机上的本地主机只是本地的。 如果您位于相同的networking名称空间中,则只能共享本地主机。 所以你可以--net=host或者你不使用localhost

检查如何处理docker文档中的音量

https://docs.docker.com/engine/userguide/dockervolumes/

Dockerfile中的VOLUME指令

https://docs.docker.com/engine/reference/builder/#volume

docker run命令的-v

https://docs.docker.com/engine/reference/commandline/cli/#run

提取

-v, --volume=[] Bind mount a volume