无法在Windows Hostmachine上运行的容器
对于大学项目,我构建了一个包含Omnet 的Docker映像,以提供一致的开发环境。
图像使用了浮标的基础图像,并像Rogaha在他的Docker-Desktop图像中一样通过SSH进行X11转发。
该图像在Linux主机系统上的工作正常。但是在Windows和OS X上,我无法从主机计算机上的容器上进行SSH。
我认为这是由于在Windows和OS X上对Docker的实现不同。
我的问题是我不知道如何通过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
解决方案
首先,链接的Microsoft文章仅适用于Windows容器。本文很好地解释了Docker网络的工作方式。
为了简化说明,我绘制了一个简单的示例。简单的ssh到docker网络中。
要能够到达桥接网络中的一个容器,需要明确曝光必要的端口。
-
公开端口
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