Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行Omnet++;在windows上具有x11转发的内部docker。SSH不工作 无法ssh到Windows主机上运行的容器中_Docker_Dockerfile_Omnet++_X11 Forwarding_Docker For Windows - Fatal编程技术网

运行Omnet++;在windows上具有x11转发的内部docker。SSH不工作 无法ssh到Windows主机上运行的容器中

运行Omnet++;在windows上具有x11转发的内部docker。SSH不工作 无法ssh到Windows主机上运行的容器中,docker,dockerfile,omnet++,x11-forwarding,docker-for-windows,Docker,Dockerfile,Omnet++,X11 Forwarding,Docker For Windows,对于一个大学项目,我构建了一个包含Omnet++的docker映像,以提供一致的开发环境 该映像使用phusions的Baseimage并通过SSH设置x11转发,就像rogaha在其映像中所做的那样 该映像在Linux主机系统上运行良好。但是在Windows和OS X上,我无法从主机上对容器进行ssh 我认为这是因为Docker在Windows和OS X上的实现不同。正如Microsoft Docker在文章中解释的那样,默认情况下,容器使用NAT网络将网络与主机和容器分开 我的问题是我不知

对于一个大学项目,我构建了一个包含Omnet++的docker映像,以提供一致的开发环境

该映像使用phusions的Baseimage并通过SSH设置x11转发,就像rogaha在其映像中所做的那样

该映像在Linux主机系统上运行良好。但是在Windows和OS X上,我无法从主机上对容器进行ssh

我认为这是因为Docker在Windows和OS X上的实现不同。正如Microsoft Docker在文章中解释的那样,默认情况下,容器使用NAT网络将网络与主机和容器分开


我的问题是我不知道如何通过ssh访问正在运行的容器。 我已经尝试了以下方法:

  • 将容器网络更改为透明网络,如Microsoft文章中所述。Windows和OS X中都会发生以下错误:
  • 在Windows上,在Virtualbox中运行Docker而不是Hyper-V
  • 显式公开端口22,如下所示:
Dockerfile 对我有效的解决方案 首先,链接的Microsoft文章仅对windows容器有效。 这篇文章很好地解释了docker网络是如何工作的

为了简化解释,我画了一个简单的例子

为了能够访问桥接网络中的容器,需要显式公开必要的端口

  • 暴露端口

    docker运行-p22{$imageName}

  • 在主机上查找端口映射

    CONTAINER ID IMAGE命令创建的状态端口名称
    a2ec2bd2b53b renderfehler/omnet_ide_baseimage“/sbin/my_init”17小时前上升17小时0.0.0.0:32773->22/tcp招标
    

  • 使用映射端口将ssh连接到容器上

    ssh-p32772root@0.0.0.0


  • 尝试使用
    桥接
    而不是
    透明
    谢谢您的建议。但是桥接不是docker中的默认设置吗?即使使用自定义网桥网络,我也无法ssh到容器中。
    docker network create -d transparent MyTransparentNetwork
    Error response from daemon: legacy plugin: plugin not found
    
    docker run -p 52022:22 containerName
    ssh -p 52022 root@ContainerIP 
    
    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