运行 docker 内的 Omnet++,在 windows 上进行 x11 转发。 SSH 不工作
Run Omnet++ inside docker with x11 forwarding on windows. SSH not working
无法在 Windows 主机
上连接到容器 运行ning
对于一个大学项目,我构建了一个包含 Omnet++ 的 docker 映像以提供一致的开发环境。
图像使用 phusions 的基础图像并通过 SSH 设置 x11 转发,就像 rogaha 在他的 docker-desktop 图像中所做的那样。
图像在 Linux 主机系统上工作得很好。但是在 Windows 和 OS X 上,我无法从主机通过 ssh 访问容器。
我认为这是由于 Docker 在 Windows 和 OS X 上的不同实现所致。如 Microsoft this 文章中所述 Docker默认使用容器的 NAT 网络将网络与主机和容器分开。
我的问题是我不知道如何通过 ssh 访问 运行ning 容器。
我已经尝试过以下方法:
- 按照 Microsoft 文章中的描述,将容器网络更改为透明网络。 Windows 和 OS 都出现如下错误 X:
docker network create -d transparent MyTransparentNetwork
Error response from daemon: legacy plugin: plugin not found
- On Windows 运行 Docker 在 Virtualbox 而不是 Hyper-V 中
- 像这样显式公开端口 22:
docker run -p 52022:22 containerName
ssh -p 52022 root@ContainerIP
Docker文件
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
对我有用的解决方案
首先,链接的 Microsoft 文章仅对 windows 容器有效。
This 文章很好地解释了 docker 网络的工作原理。
为了简化说明,我画了一个简单的例子。Simple ssh into docker network。
为了能够访问桥接网络中的容器,需要显式公开必要的端口。
公开端口
docker run -p 22 {$imageName}
在主机上查找端口映射
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
使用映射端口
ssh 到容器
ssh -p 32772 root@0.0.0.0
无法在 Windows 主机
上连接到容器 运行ning对于一个大学项目,我构建了一个包含 Omnet++ 的 docker 映像以提供一致的开发环境。
图像使用 phusions 的基础图像并通过 SSH 设置 x11 转发,就像 rogaha 在他的 docker-desktop 图像中所做的那样。
图像在 Linux 主机系统上工作得很好。但是在 Windows 和 OS X 上,我无法从主机通过 ssh 访问容器。
我认为这是由于 Docker 在 Windows 和 OS X 上的不同实现所致。如 Microsoft this 文章中所述 Docker默认使用容器的 NAT 网络将网络与主机和容器分开。
我的问题是我不知道如何通过 ssh 访问 运行ning 容器。 我已经尝试过以下方法:
- 按照 Microsoft 文章中的描述,将容器网络更改为透明网络。 Windows 和 OS 都出现如下错误 X:
docker network create -d transparent MyTransparentNetwork
Error response from daemon: legacy plugin: plugin not found
- On Windows 运行 Docker 在 Virtualbox 而不是 Hyper-V 中
- 像这样显式公开端口 22:
docker run -p 52022:22 containerName
ssh -p 52022 root@ContainerIP
Docker文件
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
对我有用的解决方案
首先,链接的 Microsoft 文章仅对 windows 容器有效。 This 文章很好地解释了 docker 网络的工作原理。
为了简化说明,我画了一个简单的例子。Simple ssh into docker network。
为了能够访问桥接网络中的容器,需要显式公开必要的端口。
公开端口
docker run -p 22 {$imageName}
在主机上查找端口映射
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
使用映射端口
ssh 到容器ssh -p 32772 root@0.0.0.0