Что происходит, когда плагин docker-maven пытается создать образ?
Я запускаю Дженкинса в контейнере докеров, и Дженкинс пытается запустить мою сборку maven. Как часть сборки, плагин docker maven инструктирует его создать изображение докеров.
Эта часть ПОМ ниже.
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.3.8</version>
<configuration>
<imageName>example</imageName>
<baseImage>java:latest</baseImage>
<skipDockerBuild>false</skipDockerBuild>
<cmd>["java", "-jar", "myLogThread-jar-with-dependencies.jar"]</cmd>
<resources>
<resource>
<directory>target/</directory>
<include>config.properties</include>
</resource>
<resource>
<directory>${project.build.directory}</directory>
<include>myLogThread-jar-with-dependencies.jar</include>
</resource>
</resources>
</configuration>
</plugin>
Команда maven работает до тех пор, пока не попытается создать изображение, после чего выдается следующее сообщение об ошибке:
[INFO] Building image example
[INFO] I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: Permission denied
Я могу войти в правильный каталог, и там находится файл Docker.
Я также могу запустить sudo docker build.
и он будет создавать изображение без проблем.
Почему сборка maven не работает? Какой запрос делается на localhost: 80? Как я могу исправить это, чтобы maven мог создать мой образ?
Примечание. Я установил гнездо для докеров и двоичный код в этом контейнере
Ответы
Ответ 1
Это можно решить, добавив переменную окружения DOCKER_HOST
в Jenkins.
Установите демона докеров таким образом:
[/etc/sysconfig/docker]
OPTIONS="-H tcp://127.0.0.1:4243"
Jenkins Jobs (переменные среды Inject):
DOCKER_HOST=tcp://127.0.0.1:4243
Ответ 2
Как упоминалось выше Раджитом Делантой, это решило проблему для меня:
Добавить: DOCKER_OPTS=' -G jenkins'
непосредственно в /etc/default/docker
.
Затем перезапустите sudo service docker restart
.
Ответ 3
У меня была та же проблема, но на моей локальной машине.
У меня есть это после прочтения этого комментария в потоке Github: https://github.com/docker/compose/issues/1214#issuecomment-256774629
В нем говорится:
Решение (с https://docs.docker.com/engine/installation/linux/debian/, работает не только с Debian):
Добавьте группу докеров, если она еще не существует.
sudo groupadd docker
Добавьте подключенного пользователя "$ {USER}" в группу докеров. Измените имя пользователя в соответствии с вашим предпочтительным пользователем. Возможно, вам придется выйти из системы и снова войти в систему, чтобы это вступило в силу.
sudo gpasswd -a ${USER} docker
Перезапустите демон Docker.
sudo service docker restart
Ответ 4
Я смог решить проблему, объединив элементы как отложенных ответов.
Установите параметры для использования другого порта в /etc/default/docker
.
DOCKER_OPTS="-H tcp://127.0.0.1:4243"
Перезапустите демон Docker.
sudo service docker restart
Затем создайте свой пакет.
export DOCKER_HOST=tcp://127.0.0.1:4243
mvn clean package docker:build
Ответ 5
Я встретил проблему у бамбукового агента, но я полагаю, что это относится и к дженкинсам.
Добавьте пользователя, запускающего maven в группу докеров. Затем перезапустите докер и службу, запущенную maven. Групповые изменения не загружаются во время работы служб. Так что в моем случае:
sudo groupadd docker # if it does not exist
sudo usermod -a -G docker bamboo-user
sudo systemctl restart docker.service
sudo systemctl restart bamboo-agent.service
Ответ 6
после того, как убедитесь, что docker ps
работает от того же пользователя, который запускает mvn
меня все еще была та же проблема. это похоже на ошибку из-за специальных символов в имени изображения. Я разрешил его, удалив знак тире (-) (или любые специальные символы) из имени изображения докеры.
попробуйте установить репозиторий для определения имени и проверки.
<configuration>
<repository>somename</repository>
</configuration>