Я использую docker-compose up для запуска контейнера, а затем использую docker ps для отображения его информации, я вижу, что часть ПОРТОВ выглядит следующим образом
0.0.0.0:2280->2280/tcp, 0.0.0.0:7000->7000/tcp, 8080/tcp
8080 - это неожиданно. Dockerfiles для создания образов:
FROM tomcat
MAINTAINER tol <etol@126.com>
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
нет "8080" в server.xml, datasource.xml и client.xml, которые используются в cat.war, поэтому они не имеют значения
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 тоже нет,
у меня вопрос, как 8080 в части ПОРТОВ?
Он унаследован от образа кота.
Вы можете проверить Dockerfile для образа tomcat здесь, в конце вы найдете:
EXPOSE 8080
В настоящее время Docker не имеет механизмов для отключения или удаления унаследованных открытых портов. По этому поводу есть проблема, которая обсуждается с 2014 года (!) в системе отслеживания проблем проекта Moby, связанный с Docker.
Eсть обходной путь, упомянутый в этой проблеме, используя многоступенчатые сборки:
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. Вы можете сопоставить его с любым портом, который вам нравится, когда вы его публикуете.