2016-04-25 3 views
1

Я новичок в Docker, поэтому я борюсь с очень простой проблемой.Запись файла Docker для Dockerhub Автоматизированные сборки

У меня есть проект maven. В локальной среде, все, что я сделать, чтобы запустить проект является:

mvn clean package jetty:run 

Я сейчас пытаюсь создать пакет для автоматизированной сборки dockerhub связаны с GitHub репо. Вот шаги, которые я взял:

  1. Создано Dockerfile, как показано ниже, и добавили его в базовую папку
  2. Зафиксируйте код GitHub
  3. Created и связали репо AutoBuild в dockerhub к репо Github.
  4. Внесите необходимые изменения, чтобы указать на конкретную отрасль и Dockerfile

Когда я коммлю, я могу видеть, что это вызывает сборку и сборка прошло успешно. Однако, когда я бегу Docker изображение, он возвращается со следующей ошибкой:

docker: Error response from daemon: Container command 'mvn clean package jetty:run' not found or does not exist.. 

Вот структура папок:

/Dockerfile 
/pom.xml 
/src/<folders that contain the code> 

Вот что я имею в Dockerfile:

FROM maven:3.3.9-jdk-8 
CMD ["mvn clean package jetty:run"] 

Я думаю, что упускаю из виду копию кода в контейнер. Но каков наилучший способ сделать это? Я попробовал команду COPY, но я не смог заставить ее работать.

Пожалуйста, помогите.

+0

Try это Dockerfile https://github.com/carlossg/docker-maven/blob/b022df671b603a9100ed9e75803ae32f753826a4/jdk-8/onbuild/Dockerfile, но удалите часть 'ONBUILD'. –

ответ

0

maven Dockerfile уже включил директиву копирования, активируется, когда вы docker build ваше изображение (с ONBUILD directive).
Он основан на maven image, который ставит mvn в /usr/bin.

Вы не должны делать команду Maven, а, как described in the doc

FROM maven:3.2-jdk-7-onbuild 
CMD ["do-something-with-built-packages"] 

Put this file in the root of your project, next to the pom.xml .

This image includes multiple ONBUILD triggers which should be all you need to bootstrap. The build will COPY . /usr/src/app and RUN mvn install .

Это означает, что полученное изображение уже скопировали источники и МВН компилируется приложение из-за ONBUILD директивы , что делает его плохим кандидатом на Dockerhub Automated builds.

+0

Я немного смущен тем, что вы говорите. Мне нужно запустить приложение. Что мне нужно сделать, чтобы это произошло? В локальной среде я использую разные плагины mvn для получения чистого запуска. Как я могу достичь этого в Докере? Должен ли я или не использовать изображение ONBUILD? Или я должен писать собственные триггеры ONBUILD. Я знаю, что это немного принципиально, но все равно я борюсь с этим. – Ritwik

+0

@Ritwik Я имею в виду, что приложение уже составлено на сборке докеров. Это то, что делает базовое изображение с его директивой ONBUILD. Таким образом, ваше изображение должно иметь в качестве CMD команду, которая запускает приложение, а не компилирует его. – VonC

+0

Возможно, мне нужна небольшая ручная работа здесь. Поэтому я модифицировал Dockerfile, и теперь он выглядит следующим образом: 'FROM maven: 3.3-jdk-7-onbuild CMD [" mvn jetty: run "]' Когда я выполняю запуск докеров, он все равно бросает мне аналогичную ошибку 'docker: Ответ на ошибку от демона: команда контейнера 'mvn jetty: run' не найдена или не существует..' – Ritwik

1

Проблема заключается в том, что «mvn» - это команда, а «clean», «package» и «jetty: run» - ее параметры. Оболочки, такие как bash, разделяют их автоматически. Докер не делает.

CMD ["mvn clean package jetty: run"] позволяет докеру искать файл с именем типа «/ usr/bin/mvn clean package jetty: run», который, конечно, не существует.

Правильная форма:

CMD ["executable","param1","param2"] 

В вашем случае:

CMD ["/usr/bin/mvn", "clean", "package", "jetty:run"] 
Смежные вопросы