gpt4 book ai didi

docker - 在Windows上使用x11转发在docker内部运行Omnet++。 SSH不起作用

转载 作者:行者123 更新时间:2023-12-02 19:36:21 28 4
gpt4 key购买 nike

无法SSH进入Windows主机上运行的容器

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

镜像使用phusions的基本镜像,并像rogaha在docker-desktop镜像中一样通过SSH设置x11转发。

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

我认为这是由于Docker在Windows和OS X上的实现方式不同所致。正如Microsoft在this文章中所解释的那样,Docker将NAT网络用作容器的默认设置是将网络与主机和容器分离。

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

  • 如Microsoft文章所述,将容器网络更改为透明网络。在Windows和OS X中都会发生以下错误:

  • docker network create -d transparent MyTransparentNetwork
    Error response from daemon: legacy plugin: plugin not found
  • 在Windows上,在Virtualbox中运行Docker而不是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
  • 关于docker - 在Windows上使用x11转发在docker内部运行Omnet++。 SSH不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44723350/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com