Сбой сборки Dockerfile при запуске mkdir только для определенных мест - PullRequest
0 голосов
/ 03 октября 2018

Наше приложение представляет собой набор Docker-контейнеров, мой Dockerfile выглядит следующим образом:

FROM jenkins/jenkins:lts
MAINTAINER xyz
RUN mkdir -p /opt/service
WORKDIR /opt/service
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV
COPY package.json /opt/service
COPY package-lock.json /opt/service
RUN npm install
COPY . /opt/service
CMD [ "npm", "start" ]

Местоположение 1: myproject / jenkins / dockerfile - оно не может выполнить mkdir

mkdir: cannot create directory ‘/opt/service’: Permission denied
The command '/bin/sh -c mkdir -p /opt/service' returned a non-zero code: 1

Местоположение 2: myproject / frontend / dockerfile - одна и та же копия файла docker хорошо собирается

Мой файл docker-compose заканчивается:

app:
  build:
    context: .
    dockerfile: jenkins/Dockerfile

1 Ответ

0 голосов
/ 04 октября 2018

Местоположение 1 дает ожидаемый результат, и я не понимаю, почему расположение 2. может быть успешно построено.

Пользователь по умолчанию, использующий jenkins / jenkins: lts image - jenkins , который НЕ НЕСЕТимею право создавать папку в / opt .

Я запустил контейнер jenkins / jenkins: lts и выполнил ту же команду:

jenkins@b4890ac012a6:/$ mkdir -p /opt/service
mkdir: cannot create directory ‘/opt/service’: Permission denied

# Equivalently
jenkins@b4890ac012a6:/opt$ mkdir service
mkdir: cannot create directory ‘service’: Permission denied

Чтобы решить эту проблему,вам нужно либо переключиться на USER root , чтобы сначала создать каталог:

....
USER root
RUN mkdir -p /opt/service
USER jenkins
....

Или вы можете выбрать путь, по которому jenkins имеет разрешение на выполнение.

...