Как настроить Debian SSHD для удаленной отладки в контейнере Docker?

Я пытаюсь настроить удаленную отладку в контейнере Docker Debian для отладки приложения Ruby на моем ноутбуке с Windows.

Это сообщение привело меня в этом направлении: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207649545-Use-RubyMine-and-Docker-for-разработка-запуск-и-отладка-перед-развертыванием-для-тестирования-»rel=

У меня есть приложение Ruby и SSHD, работающие в контейнере, хотя рецепт, который я нашел для настройки SSHD, не полностью совместим с дистрибутивом Linux, на котором основан образ Ruby.

Я основывал свою конфигурацию SSHD на этой странице документации Docker: https://docs.docker.com/engine/examples/running_ssh_service/

Мой образ основан на образе ruby:2.2 из Docker Hub, который использует Debian 8, а не Ubuntu 16.04, как в приведенном выше примере SSHD.

Я могу получить приглашение SSH, но не могу войти в систему с паролем скринкаста для root, который установлен в файле докеров.

Я открыт для любого работающего решения, будь то правильное включение входа в систему root или добавление нового пользователя с правильными разрешениями для удаленной отладки. Мне просто любопытно, какой путь будет наиболее прямым в контексте Debian. И если это создает нового пользователя, какие разрешения ему нужны?

Кроме того, чтобы быть ясным, я рассматриваю это как пробный запуск и, очевидно, каким-то образом отключу функциональность SSHD, когда буду развертывать приложение для любого контекста вне разработки.

Заранее спасибо за помощь.

Это мой текущий файл докеров

FROM ruby:2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    openssh-server

RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | 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

RUN mkdir /MyApp
WORKDIR /MyApp
ADD Gemfile /MyApp/Gemfile
ADD Gemfile.lock /MyApp/Gemfile.lock
RUN bundle install
ADD . /MyApp

а это мой docker-compose.yml

version: '2'
services:
  web:
    build: .
    command: /CivilService/docker-dev-start.sh
    volumes:
      - .:/CivilService
    ports:
      - "3000:3000"
      - "3022:22"

Docker-dev-start.sh выглядит так

#!/bin/bash

# start the SSH server for connecting the debugger in development
/usr/sbin/sshd -D &
bundle exec rails s -p 3000 -b '0.0.0.0'

person Josh Russo    schedule 07.03.2017    source источник
comment
В вашем Dockerfile отсутствует CMD или ENTRYPOINT   -  person user2915097    schedule 07.03.2017
comment
@user2915097 user2915097 docker-compose.yml применяет команду при запуске docker-compose up   -  person Josh Russo    schedule 07.03.2017
comment
Измените свой sed на RUN sed -i 's/PermitRootLogin .*/PermitRootLogin yes/'   -  person Matt    schedule 08.03.2017
comment
@ Мэтт Спасибо! Это сделало это!   -  person Josh Russo    schedule 08.03.2017


Ответы (1)


Различные дистрибутивы могут иметь немного разные конфигурации SSH, поэтому замена определенных строк может не сработать.

Чтобы покрыть любой тип строки PermitRootLogin, используйте:

RUN sed -i 's/PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config
person Matt    schedule 07.03.2017