Не удается подключиться к Redis из другого контейнера докеров

в настоящее время у меня есть одно личное изображение докера, загруженное в DockerHub, я вношу изменения для подключения этого приложения к redis (который также работает в другом контейнере докеров)

Теперь у меня появляется следующее сообщение от моего приложения, когда оно пытается подключиться к redis:

 Error saving to redis: dial tcp 127.0.0.1:6379: connect: connection refused

Я понимаю, что они не в одной сети, поэтому мое приложение указывает на 127.0.0.1:6379, который ничего не выполняет, поэтому я ищу лучший способ соединить эти контейнеры каким-либо образом, который не делает мое приложение зависит от IP-адреса, на котором размещен redis, с моей локальной машины я могу использовать redis, но не из другого контейнера докеров. Вкратце, я сделал следующее:

docker run --name redis_server -p 6379:6379 -d redis
sudo docker run -d --restart=always -p 10000:10000 --link redis_server:redis --name my_app repo/my_app

Итак, я ищу решения, как сделать 127.0.0.1:6379 доступным для my_app. Кстати, я не использую docker-compose


person Sredny M Casanova    schedule 03.09.2018    source источник
comment
Я считаю, что запуск обоих контейнеров с --network = host - ваше самое простое решение.   -  person Neekoy    schedule 03.09.2018
comment
@Neekoy большое спасибо, работает !! какие проблемы безопасности я должен учитывать с --network = host do, что делает меня уязвимым или что-то в этом роде?   -  person Sredny M Casanova    schedule 03.09.2018
comment
Что ж, если у вас нет брандмауэра, вы предоставите службы на этих портах внешнему миру на своем IP-адресе. Более безопасным решением может быть предварительное определение сети, а затем размещение в ней обоих контейнеров. Напишу ответ чуть позже.   -  person Neekoy    schedule 03.09.2018
comment
Возможный дубликат подключения Docker Redis отклонен   -  person David Maze    schedule 04.09.2018


Ответы (1)


Самым простым решением было бы запустить Docker с параметром «--network = host», который привязывает контейнеры к сети хоста. Это идеальное решение для тестирования, однако оно открывает доступ к портам и службам соответственно в Интернет (если у вас нет брандмауэра), что может быть или не быть безопасным.

Другой способ сделать это - определить сеть следующим образом:

docker network create -d bridge my-net

А затем запустить ваши контейнеры в той же сети, выполнив команду docker run с --network=my-net. Таким образом, вы можете ссылаться на каждый контейнер по его имени. Например, в вашем случае вы можете ping my_app из контейнера Redis и наоборот.

person Neekoy    schedule 03.09.2018