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

时间:2016-02-01 14:31:50

标签: database docker localhost docker-compose

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

这是我的docker-compose.yml

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

2 个答案:

答案 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