2017-02-16 37 views
6

Próbuję zbudować prostą aplikację internetową z Maven i uruchomić z Tomcat7, wewnątrz kontenera Docker.Uruchom aplikację webową maven w kontenerze dokowania

To moja konstrukcja:

- Dockerfile 
- pom.xml 
- src/main/webapp/index.hmtl 

To mój Dockerfile:

FROM java:8 

# Install maven 
RUN apt-get -y update && apt-get install -y maven 

WORKDIR /code 

# Prepare by downloading dependencies 
ADD pom.xml /code/pom.xml 

# Adding source, compile and package into a fat jar 
ADD src /code/src 
RUN ["mvn", "package"] 

EXPOSE 8080 
CMD ["mvn", "tomcat7:run"] 

buduję obraz Docker z

docker build -t webapp-example . 

i spróbuj uruchomić go z

docker run -d -p 8080:8080 webapp-example 

Ale najwyraźniej to nie działa.

Wszelkie pomysły?

+0

Masz błąd w swoim logu? – yorammi

+1

możesz spróbować uruchomić używając 'docker run -ti --rm -p 8080: 8080 webapp-example' i wkleić tutaj szczegóły? – GauravJ

+0

Nie miałem żadnych błędów, dzienniki są normalne, ponieważ uruchamiają 'mvn tomcat7: run' z kontenera. @GauravJ z jakiegoś powodu, z twoim poleceniem, moja aplikacja działa! Wielkie dzięki! – luthien

Odpowiedz

4

Ponieważ dzielonego uruchomiony przy użyciu tty i interaktywną flagę jak po rozwiązuje problemu,

docker run -ti --rm -p 8080:8080 webapp-example

to dlatego, że baza jest java:8 obraz, który jest głównie stworzony, aby uruchomić aplikację w trybie przedni (z -ti flag) lub kompiluj tylko w trybie -d.

Ponadto, ponieważ Maven jest budowanie narzędzi i nie powinien być używany do uruchamiania aplikacji, należy,

  1. Tworzenie ty webapp przy użyciu Maven: Ostatnie graficznych.
  2. Rozmieść osobno jako kontener tomcat, używając oficjalnego tomcat image.
+0

Dzięki za poradę. Ponieważ jestem nowy w Dockerze i nie jestem do końca pewien, jak to zrobić, przypuszczam, że te dwa kroki powinny być połączone przez Docker, czy mam rację? – luthien

+0

To zależy od sposobu uruchomienia aplikacji. Generalnie tworzenie plików wojennych i wdrażanie go to dwa różne etapy. Jeśli używasz Jennkins, to będzie to 2 zadania/build pipeline. Jeśli nadal chcesz robić to razem, dobrym rozwiązaniem jest funkcja dokowania. – GauravJ