Запустить Docker контейнер с хост-сети при сохранении возможности S SH в контейнер? - PullRequest
1 голос
/ 17 июня 2020

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

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

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

Фрагмент из моего файла Docker, который настраивает агент S SH

########################################################
# 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 Ответ

1 голос
/ 17 июня 2020

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

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

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

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

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

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