Ужасно ли использовать доменный сокет unix для соединения с Postgresql из док-контейнера? - PullRequest
6 голосов
/ 07 мая 2019

История ниже, но вот вопрос: я обнаружил, что если у меня на хосте докера запущен postgresql, я могу подключиться к нему в контейнере через сокет домена, смонтированный в виде файла:

docker run -v /var/run/postgresql/:/var/run/postgresql

Это похоже на серьезный взлом, поэтому мне любопытно, действительно ли это ужасно в производственной среде.Мысли?


Предыстория

Предыстория состоит в том, что у меня запущен postgresql на хосте докера, потому что я не доверяю докеру для непосредственного запуска postgresql.

Итак, мне нужно подключиться к этому экземпляру postgresql из контейнера Docker, работающего на том же сервере.Я попытался:

  • Использование --add-host

    Но это также был взлом, потому что требовалось, чтобы запуск Docker был помещен в скрипт, чтобы определить правильный IP-адресхост машина.Что-то вроде:

    docker run --add-host=postgres-host:$(ip route show | awk {print $2})
    

    Мне не нравилось это делать.

  • Я пытался использовать --net=host, но ... это не то, что мы хотим,Нам нужна оверлейная сеть.

  • Я попытался установить это из контейнера, просмотрев там IP-адрес хоста, но я не чувствовал себя прекрасно, выполняя скрипт только для этогоцель.

Итак ... Я подумал: «А как насчет использования доменного сокета?»

Ответы [ 2 ]

4 голосов
/ 07 мая 2019

Монтаж розеток не звучит для меня как взлом. Фактически, монтирование /var/run/docker.sock является стандартным методом, используемым, если вы хотите использовать команды docker изнутри контейнера.

2 голосов
/ 07 мая 2019

То, что я думал, это security & scalability.

  • безопасность

    В докере, даже если контейнер был атакован хакерами, вы все равно можете иметь одну защиту между контейнером (веб-сервером) и хостом (сервером базы данных), но с unix socket, я предполагаю, что данные будут подвергаться хакерской атаке напрямую.

  • Масштабируемость

    Одна из причин, по которой нам нужно разделить веб-сервер и сервер базы данных: если мы столкнулись с проблемой производительности, мы могли бы легко расширить веб-сервер, поскольку большее количество веб-серверов подключалось к одному серверу базы данных, приложение может поддерживать посещение большего количества людей.

    Но с unix-socket веб-сервер в докере не масштабируется, вам пришлось поместить веб-сервер (контейнер) в одну машину, чтобы использовать unix-socket дБ.

...