#php #amazon-web-services #docker #jenkins #continuous-integration
Вопрос:
Как это исправить?
Вот в чем моя ошибка:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http:///var/run/docker.sock/v1.40/auth: dial unix /var/run/docker.sock: connect: permission denied
!!! Эта ошибка только в задании php-проекта, задания Java-проектов работают нормально. !!!
Проверьте, пожалуйста, также используемую конфигурацию:
dockerhub_private = '5555555555.dkr.ecr.eu-west-1.amazonaws.com'
pipeline {
options {
durabilityHint 'PERFORMANCE_OPTIMIZED'
buildDiscarder logRotator(daysToKeepStr: '6', numToKeepStr: '30')
}
agent {
label 'ec2spot-t3large-php74'
}
parameters {
booleanParam(name: 'UPDATE_DOCKER_IMAGES', defaultValue: true, description: 'Update Docker images?')
}
stages {
stage('Base Docker') {
when {
beforeAgent true
anyOf {
expression { params.UPDATE_DOCKER_IMAGES }
}
}
steps {
script {
GIT_COMMIT = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()
GIT_BRANCH = sh(script: 'git rev-parse --abbrev-ref HEAD', returnStdout: true).trim()
}
sh "df -h"
withAWS(credentials: 'JENKINS_AWS_ACCESS', region: 'eu-west-1') {
sh ecrLogin()
}
withCredentials([
usernamePassword(
credentialsId: 'DOCKERHUB_company_',
usernameVariable: 'DOCKER_USERNAME',
passwordVariable: 'DOCKER_PASSWORD'
)
]) {
sh "docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD"
}
pullFromPublicAndPushToPrivate([
'external/php'
], params.UPDATE_DOCKER_IMAGES)
sh """
docker logout; \
df -h; \
docker info; \
top -b -n1 -o %MEM; \
docker images | grep company_r;
"""
}
post {
unsuccessful {
slackSend tokenCredentialId: 'slack_y_core_team_token', color: 'danger',
teamDomain: 'company-it', channel: '#x_team_ci',
message: "DOCKER PULL FAILED: <${BUILD_URL}|${BUILD_ID}>, branch: ${env.GIT_BRANCH}"
}
}
}
stage('Build') {
steps {
githubNotify status: 'PENDING', description: "BUILD $BUILD_ID has started", context: 'jenkins/build',
targetUrl: "$BUILD_URL", credentialsId: 'company_msbot',
account: 'company', repo: 'y_php_project', sha: "${env.GIT_COMMIT}"
sh """
echo RELEASE_VERSION=`date "%Y%m%d"`-r$BUILD_NUMBER; \
echo REVISION=$RELEASE_VERSION; \
echo DOCKER_HOST=tcp://localhost:4243; \
echo $REVISION>$WORKSPACE/nginx/version.html; \
echo IMAGE_NAME=company_r/cx-y_php_project; \
cd $WORKSPACE; \
docker build -t $IMAGE_NAME:$REVISION .; \
docker push $IMAGE_NAME:$REVISION; \
docker tag $IMAGE_NAME:$REVISION $IMAGE_NAME:latest; \
docker push $IMAGE_NAME:latest; \
PUSH_RETRY_COUNT=15; \
PUSH_RETRY_DELAY=30; \
retry "docker push $IMAGE_NAME:latest" $PUSH_RETRY_COUNT $PUSH_RETRY_DELAY; \
docker tag $IMAGE_NAME:latest $IMAGE_NAME:$REVISION; \
retry "docker push $IMAGE_NAME:$REVISION" $PUSH_RETRY_COUNT $PUSH_RETRY_DELAY; \
#remove old images; \
set e; \
docker images | grep "^<none>" | awk '{system("docker rmi -f "$3)}'; \
docker images | grep $IMAGE_NAME | grep -v "minute" | grep -v "second" | awk '{system("docker rmi -f "$3)}'; \
set -e; \
"""
sh script: 'sar -A', label: 'System Stats'
}
post {
success {
githubNotify status: 'SUCCESS', description: "BUILD $BUILD_ID has finished", context: 'jenkins/build',
targetUrl: "$BUILD_URL", credentialsId: 'company_msbot',
account: 'company', repo: 'y_php_project', sha: "${env.GIT_COMMIT}"
slackSend tokenCredentialId: 'slack_y_core_team_token',
teamDomain: 'company-it', channel: '#x_team_ci',
message: "BUILD SUCCED: <${BUILD_URL}|${BUILD_ID}>, branch: ${env.GIT_BRANCH}"
}
unsuccessful {
githubNotify status: 'ERROR', description: "BUILD $BUILD_ID has failed", context: 'jenkins/build',
targetUrl: "$BUILD_URL", credentialsId: 'company_msbot',
account: 'company', repo: 'y_php_project', sha: "${env.GIT_COMMIT}"
slackSend tokenCredentialId: 'slack_y_core_team_token', color: 'danger',
teamDomain: 'company-it', channel: '#x_team_ci',
message: "BUILD FAILED: <${BUILD_URL}|${BUILD_ID}>, branch: ${env.GIT_BRANCH}"
}
}
}
}
}
def getNameInPrivate(image) {
if (image.startsWith('company_r/')) {
image
} else {
"external/${image.split('/')[-1]}"
}
}
void pullFromPublicAndPushToPrivate(images, updateFromPublic) {
for (image in images) {
def private_image = getNameInPrivate(image)
sh script: """
docker pull ${dockerhub_private}/${private_image} amp;amp;
docker tag ${dockerhub_private}/${private_image} ${image};
ECR_PULL_CODE=$?;
if [ "$ECR_PULL_CODE" != "0" ] || [ "${updateFromPublic}" = "true" ]
then
docker pull ${image}; \
docker tag ${image} ${dockerhub_private}/${private_image}; \
docker push ${dockerhub_private}/${private_image};
fi
""".stripIndent(), label: "Pull amp; Push ${image}"
}
}
Я также предоставлю файл Dockerfile
FROM php:7.2-fpm
COPY composer.lock composer.json /var/www/
WORKDIR /var/www
RUN apt-get update amp;amp; apt-get install -y
build-essential
mariadb-client
libpng-dev
libjpeg62-turbo-dev
libfreetype6-dev
locales
zip
jpegoptim optipng pngquant gifsicle
vim
unzip
git
curl
RUN apt-get clean amp;amp; rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
COPY . /var/www
RUN composer install
COPY docker/start.sh /usr/local/bin/start
RUN chmod 777 /usr/local/bin/start
RUN chown www:www /var/www
RUN chown -R www:www-data storage
RUN chown -R www:www-data bootstrap/cache
RUN chmod -R 775 storage
RUN chmod -R 775 bootstrap/cache
USER www
EXPOSE 9000
CMD ["/usr/local/bin/start"]
О чем еще следует упомянуть?
Может быть, плагины? Но, похоже, проблема только в этой работе.
Или разорвать конфигурацию / версию.
Ответ №1:
Ошибка гласит, что ваш текущий пользователь не может получить доступ к ядру docker, поскольку у вас отсутствуют разрешения на доступ к сокету unix для связи с ядром.
Чтобы решить эту проблему : Выполните приведенную ниже команду в любой из ваших оболочек:
sudo usermod -a -G docker $USER
sudo usermod -a -G docker jenkins
ПРИМЕЧАНИЕ : выполните полную перезагрузку компьютера, а также Дженкинса.
После этого шага : Полностью выйдите из своей учетной записи и войдите обратно.
Для получения дополнительной информации : https://docs.docker.com/engine/install/linux-postinstall/
Комментарии:
1. нет( другие задания в порядке, поэтому отсутствие разрешений не является проблемой