我在容器内运行我的应用程序并映射8080 - > 5000,它的工作原理。但是,我想访问Postgres数据库,该数据库运行在HOST系统而不是其他容器内。假设pg在postgres://localhost:5434/mydb
上运行 - 如何从我的应用容器连接到该数据库?
这是我的docker-compose.yml
web:
image: myprofile/myimage:latest
ports:
- 8080:5000
答案 0 :(得分:1)
不幸的是,这个问题没有一个简单的答案。
基本上你有两个选择:
1)使用volumes
使容器中的套接字可用。
数据库,例如postgres& mysql,支持在unix域上监听 套接字而不是TCP套接字。这里的优点是你可以 通过卷装置将unix域套接字转发到容器中
docker run -v
2)使用socat
从套接字在主机内提供localhost(127.0.0.1)tcp连接
对于只有tcp套接字的应用程序,我只是将
socat
扔进了 图像,并在容器内的背景中启动它(有 它在127.0.0.1上侦听,并转发到指定的套接字)。
主机上的Localhost仅限本地。如果您在同一个网络命名空间中,则只能共享localhost。
因此,您可以--net=host
或不使用localhost
。
答案 1 :(得分:0)
检查如何处理docker docs中的卷
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