我将我的应用容器与run
上的postgres相关联:
docker run --link postgres:postgres someproject/develop
它工作正常。
但我意识到我需要在run
之前使用django命令将一些东西安装到数据库中。所以我需要在build
时进行链接。
我该怎么做?
docker build -h
没有--link
选项。
答案 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