docker ps 上出现意外的 8080 端口

docker ps 上出现意外的 8080 端口

我使用 docker-compose up 启动一个容器,然后使用 docker ps 显示其信息,我看到 PORTS 部分如下

0.0.0.0:2280->2280/tcp, 0.0.0.0:7000->7000/tcp, 8080/tcp

8080 是意外的。镜像构建 Dockerfiles 是:

    FROM tomcat
    MAINTAINER tol <[email protected]>
    RUN apt-get update && apt-get install vim -y \
                && mkdir -p /data/appdatas/cat \
                && cd /usr/local/tomcat/webapps && rm -rf  docs  examples \
                && touch ~/.vimrc && echo "set mouse-=a" > ~/.vimrc && . ~/.vimrc
    COPY server.xml /usr/local/tomcat/conf
    COPY  datasource.xml  client.xml /data/appdatas/cat/
    COPY cat.war /usr/local/tomcat/webapps

cat.war 中使用的 server.xml、datasource.xml 和 client.xml 中没有“8080”,因此它们不相关

docker-compose.xml如下:

    version: "2"
    services:
      pica-cat3:
        container_name: pica-cat3
        image: pica-cat3:latest
        ports:
          - 7000:7000
          - 2280:2280
        volumes:
          - /opt/cat-logs:/data/applogs/cat
          - /root/cat3/datasource.xml:/data/appdatas/cat/datasource.xml
          - /root/cat3/client.xml:/data/appdatas/cat/client.xml
          - /root/cat3/server.xml:/usr/local/tomcat/conf/server.xml
        command: /bin/sh -c '/usr/local/tomcat/bin/catalina.sh run'

当我使用 docker exec -it CONTAINER_ID bash 进入容器并执行 netstat -nlp 时,也没有 8080,

我的问题是,PORTS 部分中的 8080 是怎么回事?

答案1

它是从 tomcat 图像继承而来的。

您可以检查tomcat 镜像的 Dockerfile 在此处,最后你会发现:

EXPOSE 8080

目前 Docker 没有禁用或删除继承的公开端口的机制。自 2014 年以来,一直存在关于此问题的讨论 (!)在 Moby 项目问题跟踪器中,与Docker相关。

有一个该问题中提到的解决方法,使用多阶段构建:

FROM postgres as orig
FROM alpine:3.8 as postgres
COPY --from=orig / /
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]

然而,这种方法有缺点

[...]COPY --from=xxx ...不会保留文件系统所有权,因此您可能需要谨慎使用该解决方法。

是否可以使用该解决方法取决于您自己。就我个人而言,对于您的情况,我只会重用端口 8080。您可以在发布时将其映射到您喜欢的任何端口。

相关内容