Docker Compose:允许图像访问主机资源(如postgresql)
问题描述:
我们的基础设施使用Docker容器来分隔我们的服务。我开始设立我们的码头撰写组织来协助本地发展。Docker Compose:允许图像访问主机资源(如postgresql)
我们的一些服务使用Ruby on Rails框架,并且本地开发通过在本地运行服务器和数据库(传统的Rails开发)进行本地开发。
为了更贴近地模仿生产环境,docker-compose会很有用。我们的数据库不是短暂的(他们是否曾经:P),因此我们不会将它们作为码头集装箱运行。
鉴于此,如何构建我的docker-compose以允许Rails容器连接到主机的数据库(PostgreSQL在这种情况下)?本地数据库中有很多数据可用于对应用程序进行烟雾测试。
答
我想你不想手动访问server
容器内的主机IP地址。
什么可以用的是extra_hosts
和出口的主机IP地址作为环境变量:
service:
image: alpine:3.4
extra_hosts:
- "host:${HOST_IP}"
command: cat /etc/hosts
不幸的是docker-compose
不支持像"host:$(ip -4 addr show ...)"
。 因此,为了达到这个目的,每个开发者都必须编辑他们的.bashrc
(或者他们正在使用的任何东西)。
在我的机器这给了我正确的本地IP地址:
ip -4 addr show|grep brd|egrep -o 'inet ([0-9]+\.){3}[0-9]+'|cut -d ' ' -f2
替代:
或者你可以只配置数据库的docker0
接口进行监听以及和编辑您的docker-compose.yml
看起来像这样:
service:
image: alpine:3.4
extra_hosts:
- "host:172.17.0.1"
command: cat /etc/hosts
答
最好的办法做到这一点窝是要在容器中运行数据库。
数据库不是临时的,因此我们不会将它们作为码头容器运行。
此声明不正确。您可以在Docker容器中运行数据库。只要确保您使用卷将数据存储在主机上众所周知的目录中即可。这样,如果数据库停止,它将用相同的数据恢复。
将数据库存放在容器中后,可以很容易地从其他容器连接到该容器。
数据库经常在容器中运行,数据只是存储在卷中以进行持久化。 – BMitch