如何从容器内部访问主机上运行的数据库?
我运行我的应用程序内容器和地图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