Запустите Omnet ++ внутри докера с пересылкой x11 в Windows. SSH не работает

Не удается установить ssh в контейнер, работающий на хост-машине Windows

Для университетского проекта я создаю образ докера, содержащий Omnet ++, чтобы обеспечить согласованную среду разработки.

Образ использует Baseimage phusions и настраивает пересылку x11 через SSH, как это сделал rogaha в своем докере -desktop изображение.

Образ отлично работает в хост-системе Linux. Но в Windows и OS X мне не удалось подключиться по SSH к контейнеру с хост-машины.

Я полагаю, это связано с различной реализацией Docker в Windows и OS X. Как объясняется в в этой статье Microsoft Docker по умолчанию используется сеть NAT для контейнеров, чтобы отделить сети от хоста и контейнеров.


Моя проблема в том, что я не знаю, как добраться до работающего контейнера через ssh. Я уже пробовал следующее:

  • Измените контейнерную сеть на прозрачную, как описано в статье Microsoft. Следующая ошибка возникает как в Windows, так и в OS X:
docker network create -d transparent MyTransparentNetwork
Error response from daemon: legacy plugin: plugin not found
  • В Windows запустите Docker в Virtualbox вместо Hyper-V
  • Явно выставьте порт 22 следующим образом:
docker run -p 52022:22 containerName
ssh -p 52022 root@ContainerIP 

Dockerfile

FROM phusion/baseimage:latest
MAINTAINER Robin Finkbeiner 
LABEL Description="Docker image for Nesting Stupro University of Stuttgart containing full omnet 5.1.1"

# Install dependencies
RUN apt-get update && apt-get install -y \
    xpra\
    rox-filer\
    openssh-server\
    pwgen\
    xserver-xephyr\
    xdm\
    fluxbox\
    sudo\
    git \
    xvfb\
    wget \
    build-essential \
    gcc \
    g++\
    bison \
    flex \
    perl \
    qt5-default\
    tcl-dev \
    tk-dev \
    libxml2-dev \
    zlib1g-dev \
    default-jre \
    doxygen \
    graphviz \
    libwebkitgtk-3.0-0 \
    libqt4-opengl-dev \
    openscenegraph-plugin-osgearth \
    libosgearth-dev\
    openmpi-bin\
    libopenmpi-dev

# Set the env variable DEBIAN_FRONTEND to noninteractive
ENV DEBIAN_FRONTEND noninteractive

#Enabling SSH -- from phusion baseimage documentation 
RUN rm -f /etc/service/sshd/down

# Regenerate SSH host keys. baseimage-docker does not contain any, so you
# have to do that yourself. You may also comment out this instruction; the
# init system will auto-generate one during boot.
RUN /etc/my_init.d/00_regen_ssh_host_keys.sh

# Copied command from https://github.com/rogaha/docker-desktop/blob/master/Dockerfile
# Configuring xdm to allow connections from any IP address and ssh to allow X11 Forwarding. 
RUN sed -i 's/DisplayManager.requestPort/!DisplayManager.requestPort/g' /etc/X11/xdm/xdm-config
RUN sed -i '/#any host/c\*' /etc/X11/xdm/Xaccess
RUN ln -s /usr/bin/Xorg 
RUN echo X11Forwarding yes >> /etc/ssh/ssh_config

# OMnet++ 5.1.1

# Create working directory
RUN mkdir -p /usr/omnetpp
WORKDIR /usr/omnetpp

# Fetch Omnet++ source
RUN wget https:******omnetpp-5.1.1-src-linux.tgz
RUN tar -xf omnetpp-5.1.1-src-linux.tgz

# Path
ENV PATH $PATH:/usr/omnetpp/omnetpp-5.1.1/bin

# Configure and compile 
RUN cd omnetpp-5.1.1 && \ 
    xvfb-run ./configure && \ 
    make 

# Cleanup 
RUN apt-get clean && \
    rm -rf /var/lib/apt && \
    rm /usr/omnetpp/omnetpp-5.1.1-src-linux.tgz

person Robin Finkbeiner    schedule 23.06.2017    source источник
comment
Попробуйте использовать Bridge вместо transparent   -  person Gregory Suvalian    schedule 23.06.2017
comment
Благодарим за ваше предложение. Но разве мост не является настройкой по умолчанию в докере? Даже с настраиваемой сетью моста я не могу использовать ssh в контейнере.   -  person Robin Finkbeiner    schedule 26.06.2017


Ответы (1)


Решение, которое сработало для меня

Прежде всего, связанная статья Microsoft действительна только для контейнера Windows. В этой статье очень хорошо объясняется, как работают сети докеров.

Чтобы упростить объяснение, я нарисовал простой пример: Простой ssh ​​в сеть докеров.

Чтобы получить доступ к контейнеру в мостовых сетях, необходимо явно предоставить необходимые порты.

  1. Выставить порт

    docker run -p 22 {$imageName}

  2. Найдите сопоставление портов на хост-машине

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a2ec2bd2b53b renderfehler/omnet_ide_baseimage "/sbin/my_init" 17 hours ago Up 17 hours 0.0.0.0:32773->22/tcp tender_newton

  3. ssh в контейнер с использованием сопоставленного порта

    ssh -p 32772 [email protected]

person Robin Finkbeiner    schedule 27.06.2017