Comment lier des conteneurs docker sur la construction?

j'ai relié mon conteneur d'application à postgres sur run:

docker run --link postgres:postgres someproject/develop

et il a bien fonctionné.

mais j'ai réalisé que j'avais besoin d'installer quelques trucs dans la base de données avec la commande django avant run. J'ai donc besoin de lier tout en build.

Comment puis-je faire cela?

docker build -h ne pas --link option.

19
demandé sur das-g 2014-10-24 19:34:06

4 réponses

j'ai eu la réponse à partir du menu fixe contributeur 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

ça va enflammer postgres. Enflammer un conteneur qui fait la migration de db et immédiatement sort et se retire. Active l'application rails.

pensez au processus de construction comme compiler une application. Vous ne semez pas de données dans une base de données dans le cadre de la phase de compilation.

17
répondu syabro 2014-10-27 15:37:20

Vrai, mais docker build accepter --network option.

vous pouvez mettre vos conteneurs prérequis sur un réseau nommé / personnalisé, par exemple:

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

puis construisez sur ce réseau:

docker build --network whatever [etc.]

Fonctionne bien.

5
répondu Chris Johnson 2017-04-20 15:24:22

Vous ne pouvez pas faire cela. Vous pouvez soit construire une image enfant de postgres, ou mettre à jour la base de données chaque fois que vous démarrez le conteneur.

4
répondu seanmcl 2014-10-24 16:21:30

j'ai eu un problème similaire. J'ai voulu accélérer la construction d'images avec l'aide de apt-cacher. Il fonctionne dans son propre conteneur et d'une façon ou d'une autre d'autres images, que j'ai construit, a dû communiquer avec elle.

la solution était de publier docker0, qui est disponible pour les conteneurs intermédiaires générés pendant la construction de l'image.

Exemple Dockerfile:

FROM debian:8

RUN ping -c 2 172.17.0.1

Et c'est la façon dont il construit:

$ 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
2
répondu Roman Saveljev 2016-04-21 19:42:12