Запустить контейнер Docker с сетью хоста, сохранив при этом возможность подключения к контейнеру по SSH?

Я запускаю локальный контейнер докеров в качестве среды для запуска своих приложений и использую возможности удаленного хоста CLion для управления цепочкой инструментов. Мои приложения взаимодействуют через определенный сетевой интерфейс через различные порты и IP-адреса.

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

Я знаю, что могу запустить контейнер докеров с помощью --network=hostно это, похоже, исключает возможность использования SSH в контейнере докеров, что является необходимым условием для использования CLion и докеров. Есть ли способ сохранить и то, и другое? Использовать хост-сеть, но также включить ssh'ing в контейнер докеров?

Фрагмент из моего файла Dockerfile, который настраивает агент SSH

########################################################
# Remote debugging and login in
########################################################

RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

# 22 for ssh server. 7777 for gdb server.
EXPOSE 22 7777

RUN useradd -ms /bin/bash debugger
RUN echo 'debugger:pwd' | chpasswd

CMD ["/usr/sbin/sshd", "-D"]

1 ответ

Решение

С помощью --network=host означает, что ваш контейнер будет использовать порт 22 хост-машины, и если на машине уже запущен процесс, использующий порт 22, агент SSH выйдет из строя.

Для подтверждения вы можете просмотреть файлы журнала агента.

Вы можете настроить агент SSH для работы на другом порту, отличном от 22 (например, 2233), чтобы избежать конфликта портов. В вашем Dockerfile добавьте следующую строку:

RUN sed -i 's/\(^Port\)/#\1/' /etc/ssh/sshd_config && echo Port 2233 >> /etc/ssh/sshd_config

Затем настройте CLion для подключения к контейнеру через альтернативный порт.

Другие вопросы по тегам