Команда запуска Docker не применяется к образу - PullRequest
0 голосов
/ 03 мая 2018

У меня есть Dockerfile следующим образом:

FROM jenkins/jenkins:2.119

USER jenkins
ENV HOME /var/jenkins_home

COPY --chown=jenkins:jenkins ssh ${HOME}/.ssh/

RUN chmod 700 ${HOME}/.ssh && \
    chmod 600 ${HOME}/.ssh/*

Каталог ssh имеет 755/644 в файле dir / на сборочной машине. Тем не менее, когда я строю с

docker build -t my/temp .

и запустите образ командой ls

docker run -it --rm my/temp ls -la /var/jenkins_home/.ssh

ни одна из команд chmod не применяется к изображению

drwxr-xr-x 2 jenkins jenkins 4096 May  3 12:46 .
drwxr-xr-x 4 jenkins jenkins 4096 May  3 12:46 ..
-rw-r--r-- 1 jenkins jenkins  391 May  3 11:42 known_hosts

Во время сборки вижу

Step 4/6 : COPY --chown=jenkins:jenkins ssh ${HOME}/.ssh/
 ---> 58e0d8242fac
Step 5/6 : RUN chmod 700 ${HOME}/.ssh &&     chmod 600 ${HOME}/.ssh/*
 ---> Running in 0c805d4d4252
Removing intermediate container 0c805d4d4252
 ---> bbfc828ace79

Похоже, chmod отбрасывается. Как я могу остановить это?

Я использую последнюю версию Docker (Edge) на Mac OSX Версия 18.05.0-ce-rc1-mac63 (24246); край 3b5a9a44cd

EDIT

С --rm также не работал (после удаления изображения и перестроения), но не получил сообщение об удалении

docker build -t my/temp --rm=false .

run -it --rm my/temp ls -la /var/jenkins_home/.ssh
drwxr-xr-x 2 jenkins jenkins 4096 May  3 15:42 .
drwxr-xr-x 4 jenkins jenkins 4096 May  3 15:42 ..
-rw-r--r-- 1 jenkins jenkins  391 May  3 11:42 known_hosts

РЕДАКТИРОВАТЬ 2

Таким образом, в основном ошибка в Docker, когда базовый образ с VOLUME приводит к сбою chmod и, аналогично, RUN mkdir на томе завершается ошибкой, но COPY делает, но оставляет каталог с неправильными разрешениями. Благодаря bkconrad .

РЕДАКТИРОВАТЬ 3

Создана вилка с исправлением здесь https://github.com/systematicmethods/jenkins-docker build.sh создаст образ локально

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Это связано с тем, как Docker обрабатывает VOLUME s для изображений.

С docker inspect my/temp:

"Volumes": {
  "/var/jenkins_home": {}
},

Есть полезный билет по этому поводу из проекта moby:

https://github.com/moby/moby/issues/12779

В основном вам нужно будет выполнить chmod во время выполнения.

Установка для HOME envvar пути без тома, например /tmp, показывает ожидаемое поведение:

$ docker run -it --rm my/temp ls -la /tmp/.ssh
total 8
drwx------ 2 jenkins jenkins 4096 May  3 17:31 .
drwxrwxrwt 6 root    root    4096 May  3 17:31 ..
-rw------- 1 jenkins jenkins    0 May  3 17:24 dummy
0 голосов
/ 03 мая 2018
Step 5/6 : RUN chmod 700 ${HOME}/.ssh &&     chmod 600 ${HOME}/.ssh/*
 ---> Running in 0c805d4d4252

Removing intermediate container 0c805d4d4252

Как вы можете видеть, «промежуточный контейнер» удаляется, что является нормальным поведением докера, если вы хотите сохранить команду «использовать ниже».

docker build -t my/temp --rm=false .

Это также было объяснено в одном из постов

Почему образ сборки docker из файла docker создает контейнер при неправильном выходе из сборки?

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