首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在码头内运行Omnet++,并在窗口上转发x11。SSH不工作

在码头内运行Omnet++,并在窗口上转发x11。SSH不工作
EN

Stack Overflow用户
提问于 2017-06-23 14:02:38
回答 1查看 714关注 0票数 1

无法将ssh放入在Windows主机上运行的容器

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

图像使用phusions的基本映像并通过SSH设置x11转发,就像rogaha在其码头-台式机图像中所做的那样。

这个映像在上运行得非常好。但在Windows和OS上,我无法从主机对容器进行ssh操作。

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

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

  • 如Microsoft文章所述,将容器网络更改为透明网络。在Windows和OS中都会发生以下错误:
代码语言:javascript
运行
复制
docker network create -d transparent MyTransparentNetwork
Error response from daemon: legacy plugin: plugin not found
  • Windows在Virtualbox中的应用
  • 像这样显式地公开端口22:
代码语言:javascript
运行
复制
docker run -p 52022:22 containerName
ssh -p 52022 root@ContainerIP 

Dockerfile

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 06:49:10

对我有用的解决方案

首先,链接的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 root@0.0.0.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44723350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档