簡體   English   中英

如何在構建上鏈接docker容器?

[英]How to link docker containers on build?

我在run將我的app容器鏈接到postgres:

docker run --link postgres:postgres someproject/develop

它工作得很好。

但我意識到我需要在run之前使用django命令將一些東西安裝到數據庫中。 所以我需要在build鏈接。

我怎樣才能做到這一點?

--link docker build -h沒有--link選項。

我得到了碼頭工作者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應用程序。

想一想構建過程,比如編譯應用程序。 作為編譯階段的一部分,您不會將數據植入數據庫。

沒錯,但是--network docker build確實接受了--network選項。

您可以將先決條件容器放在命名/自定義網絡上,例如:

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

然后在該網絡上構建:

docker build --network whatever [etc.]

效果很好。

你不可以做這個。 您可以構建postgres的子映像,也可以在每次啟動容器時更新數據庫。

我有一個類似的問題。 我想在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM