首页 > 解决方案 > docker暴露错误的端口打开

问题描述

我有一个带有 Wildfly 服务器的 docker 映像,该服务器绑定到 0.0.0.0 接口上的端口 8080、8443、8787 和 9990(用于开发和远程调试)。

Dockerfile本身不包含任何EXPOSE语句,因为我想使用docker-compose.yml.

Dockerfile(缩短)

FROM ubuntu:bionic
ARG DEBIAN_FRONTEND=noninteractive
RUN     apt-get update && \
        apt-get install -y -q some,packages,here
        && apt-get clean \
        && apt-get autoclean \
        && apt-get --purge -y autoremove \
        && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENV WILDFLY_VERSION 16.0.0.Final
ENV WFLY_DIR /wildfly-$WILDFLY_VERSION
ENV JBOSS_HOME $WFLY_DIR
ADD /wildfly-$WILDFLY_VERSION 
RUN groupadd -g 999 wildfly && useradd -r -u 999 -g wildfly --home= --shell=/bin/bash wildfly
RUN chown -R wildfly:wildfly /wildfly-$WILDFLY_VERSION 
RUN chmod 755  $WFLY_DIR/bin/*.sh 
USER wildfly

docker-compose.yml 文件基本上包含以下内容:

version: "3.5"
services:
  appsvr:
    build: ../../images/myimage/
    command: ["/bin/bash", "/start.sh"]
    expose:
      - 8443
      - 8787

我启动容器,docker-compose up -dwildfly 按预期出现。现在我检查暴露了哪些端口并获取容器的 ip:

 bash% docker inspect --format=" {{ .NetworkSettings.Ports }} " containername
 map[8443/tcp:[] 8787/tcp:[]]
 bash% docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'  containername
172.20.0.10

这似乎是正确的。我可以连接到 8443,但我无法连接到 8787,使用 nmap 对 IP 的进一步分析产生:

 bash% nmap -p8000-10000 172.20.0.10

Starting Nmap 6.40 ( http://nmap.org ) at 2019-10-04 16:33 UTC
Nmap scan report for ip-172-20-0-10.eu-central-1.compute.internal (172.20.0.10)
Host is up (0.00029s latency).
Not shown: 1998 closed ports
PORT     STATE SERVICE
8080/tcp open  http-proxy
8443/tcp open  https-alt
9990/tcp open  osm-appsrvr

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

这很奇怪,因为我没有公开 8080 或 9990(我检查过,它确实是 8080 响应请求的狂野)。而 8787 - 虽然通过 docker-compose 暴露(并且在炮击后在容器内打开!) - 不是。

我的 docker-engine 和 docker-compose 版本

bash% docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a215d7133c34aa18e3b72b4a21fd0c6136
 Built:             Fri Jun 28 23:16:08 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a/18.06.1-ce
  Built:            Fri Jun 28 23:17:39 2019
  OS/Arch:          linux/amd64
  Experimental:     false

bash% docker-compose version
docker-compose version 1.21.2, build a133471
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

这是可以预期的吗?我不认为它是。还是我在概念上误解了 EXPOSE 应该如何工作的一些东西(我假设未暴露的端口不可见,反之亦然?)

标签: dockerdocker-composedockerfilewildfly

解决方案


推荐阅读