如何在构建上链接docker容器?

时间:2014-10-24 15:34:06

标签: django postgresql docker

我将我的应用容器与run上的postgres相关联:

docker run --link postgres:postgres someproject/develop

它工作正常。

但我意识到我需要在run之前使用django命令将一些东西安装到数据库中。所以我需要在build时进行链接。

我该怎么做?

docker build -h没有--link选项。

4 个答案:

答案 0 :(得分:19)

我从码头工作者Brian Goff那里得到了答案:

docker run -d --name mydb postgres
docker run --rm --link mydb:db myrailsapp rake db:migrate
docker run -d --name myapp --link mydb:db myrailsapp

这将是postgres。 启动一个执行db迁移的容器,然后立即退出并自行删除。 启动rails app。

将构建过程想象为编译应用程序。作为编译阶段的一部分,您不会将数据播种到数据库中。

答案 1 :(得分:6)

是的,但docker build确实接受--network选项。

您可以将先决条件容器放在命名/自定义网络上,例如:

docker network create whatever
docker run --network whatever --name postgres [etc.] someproject/develop

然后在该网络上构建:

docker build --network whatever [etc.]

运作良好。

答案 2 :(得分:4)

你不能这样做。您可以构建postgres的子映像,也可以在每次启动容器时更新数据库。

答案 3 :(得分:2)

我有类似的问题。我想在apt-cacher的帮助下加快图像构建速度。它运行在自己的容器中,不知何故,我建立的其他图像必须与之通信。

解决方案是在所有接口上发布apt-cacher端口。这包括例如docker0,可用于在图像构建期间生成的中间容器。

示例Dockerfile

FROM debian:8

RUN ping -c 2 172.17.0.1

这就是它的构建方式:

$ docker build - <dock
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:8
 ---> 47af6ca8a14a
Step 2 : RUN ping -c 2 172.17.0.1
 ---> Running in 4f56ce7c7b63
PING 172.17.0.1 (172.17.0.1): 56 data bytes
64 bytes from 172.17.0.1: icmp_seq=0 ttl=64 time=0.117 ms
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.130 ms
--- 172.17.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.117/0.123/0.130/0.000 ms
 ---> 5c73a36a0a6a
Removing intermediate container 4f56ce7c7b63