Если вы хотите подключить различные контейнеры docker — например node.js сервер и слой кэширования redis — возможно, вы заметили, что функционал dockers — link flag устарел и теперь считается устаревшим. Одним из решений было бы использовать Docker Compose для совместной независимости между контейнерами, но я предполагаю, что вы используете обычный старый Docker.
Предпочтительный способ решения проблем называется Docker container networking. Сейчас я покажу вам, как настроить вашу контейнерную сеть docker и позволить контейнерам взаимодействовать друг с другом по имени хоста, а не по IP-адресу.
Во-первых, предположим, что у вас есть контейнер nodejs, который принимает url redis в качестве переменной среды. Вы бы развернули свой контейнер следующим образом:
$ docker --name myNodejs run -d -p 3001:3001 -e REDIS_URL= nodejs
Если вы запустите redis на своём локальном компьютере, это не принесёт никакой пользы, так как контейнеры Docker по умолчанию работают в своих собственных частных сетях и не смогут получить доступ ни к чему, работающему на вашем компьютере. В этом случае вы можете, например, использовать размещённое решение redis. Но поскольку мы всё о контейнерах, давайте раскрутим контейнер redis.
$ docker run --name myRedis -d -p 6379:6379 redis
Теперь у вас работают два контейнера, но они не знают друг о друге. Именно здесь в игру вступает контейнерная сеть Docker. Давайте создадим сеть с именем myNetwork
$ docker network create myNetwork
$ docker network list
Вы увидите список текущих сетей, и myNetwork будет одной из них. Теперь давайте пересоздадим наш контейнер redis с правильным флагом.
$ docker run --name redis.networked -d -p 6379:6379 --network myNetwork redis
Мы можем проверить, подключён ли контейнер к нашей сети, выполнив следующую команду
$ docker network inspect myNetwork
Вы увидите, что redis.networked работает в вашей сети. Превосходно! IP-адрес также отображается, но то, что позволяет вам делать контейнерная сеть, — это ссылаться на другие контейнеры, используя их имя.
$ docker run --name node.networked -d -p 3001:3001 -e REDIS_URL=redis://redis.networked:6379 --network myNetwork nodejs
И вот! Теперь ваш контейнер redis доступен во всех контейнерах, использующих флаг сети, указывающий на myNetwork в разделе redis.networked. Надеюсь,, что это было полезно для тех, кто пытается перейти от связанных контейнеров к контейнерной сети.
techsupport@cloudlite.ru - служба техподдержки
sales@cloudlite.ru - вопросы по услугам, оплате, документам и партнерству
partner@cloudlite.ru - партнерская программа