Как связать контейнеры докеров с сборкой?
Я связал контейнер приложения с postgres на run
:
docker run --link postgres:postgres someproject/develop
и он работал нормально.
Но я понял, что мне нужно установить некоторые вещи в базу данных с помощью команды django до run
. Поэтому мне нужна ссылка build
.
Как я могу это сделать?
docker build -h
не имеет опции --link
.
Ответы
Ответ 1
Я получил ответ от вкладчика докеров Брайана Гоффа:
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 и немедленно выйдет и удалит себя.
Запускает приложение для рельсов.
Подумайте о процессе сборки, таком как компиляция приложения. Вы не помещаете данные в базу данных как часть фазы компиляции.
Ответ 2
Вы не можете этого сделать. Вы можете либо создать дочерний образ postgres, либо обновить базу данных каждый раз, когда вы запустите контейнер.
Ответ 3
Правда, но docker build
принимает параметр --network
.
Контейнеры необходимых условий можно разместить в названной/настраиваемой сети, например:
docker network create whatever
docker run --network whatever --name postgres [etc.] someproject/develop
Затем создайте эту сеть:
docker build --network whatever [etc.]
Хорошо работает.
Ответ 4
У меня была аналогичная проблема. Я хотел ускорить создание изображений с помощью 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