2016-07-31 99 views
0

我们的基础设施使用Docker容器来分隔我们的服务。我开始设立我们的码头撰写组织来协助本地发展。Docker Compose:允许图像访问主机资源(如postgresql)

我们的一些服务使用Ruby on Rails框架,并且本地开发通过在本地运行服务器和数据库(传统的Rails开发)进行本地开发。

为了更贴近地模仿生产环境,docker-compose会很有用。我们的数据库不是短暂的(他们是否曾经:P),因此我们不会将它们作为码头集装箱运行。

鉴于此,如何构建我的docker-compose以允许Rails容器连接到主机的数据库(PostgreSQL在这种情况下)?本地数据库中有很多数据可用于对应用程序进行烟雾测试。

+1

数据库经常在容器中运行,数据只是存储在卷中以进行持久化。 – BMitch

回答

0

我想你不想手动访问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 
0

最好的办法做到这一点窝是要在容器中运行数据库。

数据库不是临时的,因此我们不会将它们作为码头容器运行。

此声明不正确。您可以在Docker容器中运行数据库。只要确保您使用卷将数据存储在主机上众所周知的目录中即可。这样,如果数据库停止,它将用相同的数据恢复。

将数据库存放在容器中后,可以很容易地从其他容器连接到该容器。

相关问题