Сервер Tomcat с помощью Docker на ПК с Windows - PullRequest
0 голосов
/ 26 марта 2019

Я сделал веб-приложение на Java и хотел бы проверить сайт локально с помощью Docker.

Файл войны, который я создал, работает отлично, но для правильного прочтения его необходимо вставить в этот путь:

/tomcat/webapps/ROOT/

По этим причинам я решил использовать эту форму:

https://hub.docker.com/_/tomcat

В частности, я решил использовать этот Dockerfile:

https://github.com/docker-library/tomcat/blob/ec2d88f0a3b34292c1693e90bdf786e2545a157e/9.0/jre11-slim/Dockerfile

Я добавил этот код к концу:

...
EXPOSE 8080
CMD ["cd /usr/local/tomcat/webapps/"]
CMD ["mv ROOT ROOT.old"]
CMD ["mkdir ROOT"]
COPY ./esercitazione.1.maven/ /usr/local/tomcat/webapps/ROOT/
CMD ["catalina.sh", "run"]

Я использовал этот код в приглашении Windows 10:

D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat-9-java-11:v2.0 .
docker run -it --rm --name tomcat-9-java-11-container -p 8888:8080 tomcat-9-java-11:v2.0

Когда я вхожу в браузер по этой ссылке:

http://192.168.99.103:8888/

Я вижу это:

https://prnt.sc/n2vti1

Я новичок в Docker и Tomcat, и мне нужна небольшая помощь.

Внутри этого пути я положил свой разархивированный файл .war:

D:\DATI\Docker-Tomcat-Win10\esercitazione.1.maven

Спасибо

%%%%%%%%%%%%%%%%%%%%%%%%%%

@ Шри Тивари

%%%%%%%%%%%%%%%%%%%%%%%%%%

Прежде всего спасибо за помощь!

Я удалил все контейнеры и все изображения в Docker и использовал ваш Dockerfile (я только изменил имя папки, содержащей файлы .war для проверки).

FROM tomcat:9-jre8
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=128m"
WORKDIR /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ./webapps/*.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD ["catalina.sh", "run"]

Я разместил файл .war по этому адресу:

D:\DATI\Docker-Tomcat-Win10\webapps\esercitazione.1.maven.war

Я открыл приглашение Windows и набрал:

D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat:v1.0 .
docker run -it --rm --name tomcat-container -p 8888:8080 tomcat:v1.0

Я ввел этот URL в браузер:

http://192.168.99.103:8888/esercitazione.1.maven/

тогда этот другой:

http://192.168.99.103:8888/

К сожалению, ни один из них не прошел хорошо.

Единственная ошибка, с которой я столкнулся при создании изображения, это:

"ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: Вы создаете образ Docker из Windows на хосте, отличном от Windows. Файлы и каталоги, добавленные в контекст сборки, будут иметь права доступа '-rwxr-xr-x'. Рекомендуется дважды проверить и сбросить разрешения для конфиденциальных файлов и каталогов. "

%%%%%%%%%%%%%%%%%%%%%%%%%%

@ Miq

%%%%%%%%%%%%%%%%%%%%%%%%%%

Прежде всего спасибо за помощь!

Я также проверил ваш код, но он не работает.

Dockerfile:

FROM tomcat:9-jre11-slim
RUN mv webapps/ROOT webapps/ROOT.old && mkdir webapps/ROOT
COPY ./esercitazione.1.maven/ webapps/ROOT/

Код:

D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat:v2.0 .
docker run -it --rm --name tomcat-container tomcat:v2.0

Браузер:

http://192.168.99.103:8080/

Другие тесты:

FROM tomcat:9-jre11-slim
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=128m"
RUN mv webapps/ROOT webapps/ROOT.old && mkdir webapps/ROOT
WORKDIR /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/ROOT/*
COPY ./webapps/*.war /usr/local/tomcat/webapps/ROOT/
EXPOSE 8080
CMD ["catalina.sh", "run"]

docker ps -a
docker images
docker stop tomcat-container
docker rmi tomcat:v3.0

D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat:v3.0 .
docker run -d --name tomcat-container -p 8888:8080 tomcat:v3.0

http://192.168.99.103:8888/

%%%%%%%%%%%%%%%%%%%%%%%%%%

Другие тесты: (8 апреля 2019 г.)

FROM tomcat:9.0.17-jre11-slim
LABEL Author="Nome Cognome"
EXPOSE 8080
RUN rm -fr /usr/local/tomcat/webapps/ROOT
COPY ./esercitazione.1.maven.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]

>

docker build -t tomcat-eb:v.9.0.17 .
docker run -it --rm -p 8888:8080 tomcat-eb:v.9.0.17

>

Я собираюсь сюда:

http://192.168.99.103:8888

и браузер отправляет меня сюда:

https://192.168.99.103:8443

%%%%%%%%%%%%%%%%%%%%%%%%%%

Другие тесты: (я выбираю другое изображение)

FROM tomee:8-jre-8.0.0-M2-webprofile
LABEL Author="Nome Cognome"
EXPOSE 8080
RUN rm -fr /usr/local/tomcat/webapps/ROOT
COPY ./esercitazione.1.maven.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]

>

docker build -t tomcat-eb:v.9.0.17 .
docker run -it --rm -p 8888:8080 tomcat-eb:v.9.0.17

>

Если я пойду сюда:

http://192.168.99.103:8888

Я вижу Tomcat дома, а не мое веб-приложение.

Это проблема без решения?

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Сначала вам нужно скомпилировать ваш код в файл war, затем вы можете использовать ниже Dockerfile

FROM tomcat:9-jre8
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=128m"
WORKDIR /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ./esercitazione.1.maven/*.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD ["catalina.sh", "run"]
0 голосов
/ 27 марта 2019

Самая большая проблема, которую я вижу здесь, заключается в том, что вы используете CMD вместо RUN в вашем файле Docker.CMD должен определить команду, которая будет выполняться при запуске контейнера.В имеющемся у вас Dockerfile только последний выполняется при запуске вашего контейнера, и все эти mkdirs, move и т. Д. Никогда не выполняются.Как уже говорилось, вам нужно использовать ключевые слова RUN, чтобы указать команду, которую процесс сборки должен выполнить и зафиксировать как слой изображения.Возможно, вам также не нужен CMD catalina.sh, поскольку он может быть получен из образа, на котором вы основываетесь, но вам нужно проверить его на странице документа для получения базового изображения или взглянуть на его Dockerfile или использовать docker history imagename Чтобы увидетьслои и команды, используемые для их создания.

Я более подробно изучил это и основное изображение, которое вы используете.В дополнение к CMD ваша проблема заключается в том, что вы меняете рабочий каталог, выполняя команды cd.catalina.sh существует в $CATALINA_HOME dir, который затем помечается как рабочий каталог в базовом образе.Когда вы изменяете активный каталог, выполняя cd, это нарушает время выполнения образа.

Я бы предложил вам попробовать следующий файл dockerfile:

FROM tomcat:9-jre11-slim
RUN mv webapps/ROOT webapps/ROOT.old && mkdir webapps/ROOT
COPY ./esercitazione.1.maven/ webapps/ROOT/

Не нужно использовать EXPOSE иCMD как они определены в базовом изображении.Кроме того, базовое изображение определяет WORKDIR для $ CATALINA_HOME, и именно здесь вы будете находиться при выполнении любых следующих команд (трактуйте WORKDIR как cd, но в стиле докера).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...