在Docker容器中打开端口

我试图在一个Docker容器中以debugging模式运行node.js应用程序,并将另一个容器中的debugging器附加到在第一个容器中运行的应用程序中。

因此,我试图打开端口5858到外面的世界。 但是,当我--link另一个容器连接到第一个容器(带有别名firstContainer ),并运行nmap -p 5858 firstContainer ,我发现5858端口是closures的。 第一个容器告诉我,node.js应用程序正在监听端口5858,我已经暴露了Dockerfile中的端口,并且还将端口绑定到了我机器上相应的端口(尽pipe我不是确定这是必要的)。 当我在端口8080上运行nmap时,一切都成功了。

如何打开Docker容器上的端口5858,以便可以将debugging器连接到此端口?

Dockerfile是:

 FROM openshift/base-centos7 # This image provides a Node.JS environment you can use to run your Node.JS # applications. MAINTAINER SoftwareCollections.org <sclorg@redhat.com> EXPOSE 8080 5858 ENV NODEJS_VERSION 0.10 LABEL io.k8s.description="Platform for building and running Node.js 0.10 applications" \ io.k8s.display-name="Node.js 0.10" \ io.openshift.expose-services="8080:http" \ io.openshift.tags="builder,nodejs,nodejs010" RUN yum install -y \ https://www.softwarecollections.org/en/scls/rhscl/v8314/epel-7-x86_64/download/rhscl-v8314-epel-7-x86_64.noarch.rpm \ https://www.softwarecollections.org/en/scls/rhscl/nodejs010/epel-7-x86_64/download/rhscl-nodejs010-epel-7-x86_64.noarch.rpm && \ yum install -y --setopt=tsflags=nodocs nodejs010 && \ yum clean all -y # Copy the S2I scripts from the specific language image to $STI_SCRIPTS_PATH COPY ./s2i/bin/ $STI_SCRIPTS_PATH # Each language image can have 'contrib' a directory with extra files needed to # run and build the applications. COPY ./contrib/ /opt/app-root # Drop the root user and make the content of /opt/app-root owned by user 1001 RUN chown -R 1001:0 /opt/app-root USER 1001 # Set the default CMD to print the usage of the language image CMD $STI_SCRIPTS_PATH/usage 

运行:

 docker run -P -p 5858:5858 -p 8080:8080 --name=firstContainer nodejs-sample-app 

采取从/从这里的指示build造。

谢谢。

-P自动将容器内的任何暴露端口映射到主机上的随机端口,而-p允许显式映射端口。 使用--link标志允许两个docker集装箱彼此通信,但是没有做任何事情来暴露端口到外部世界(在docker专用networking之外)。