Вложенный контейнер не монтирует файлы и папки правильно - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь реализовать конвейер CI / CD с использованием Jenkins и Ansible (не имеет отношения к вопросу).

Я использую контейнер Jekins Docker в VPS (Digital Oceal ) и с помощью docker -compose для настройки его развертывания и управления его жизненным циклом. Поскольку этот конвейер включает сборку и запуск других контейнеров для сборки моих проектов, я смонтировал сокет docker непосредственно в ОС хоста, как вы можете видеть в docker -compose.yml:

version: "3"

services:
  jenkins:
    container_name: jenkins
    image: jenkins-ai
    build:
      context: jenkins
    volumes:
      - ./jenkins_volume:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - atlas-ci-net
    deploy:
      restart_policy:
        condition: any
  nginx:
    container_name: nginx
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
    deploy:
      restart_policy:
        condition: any
    networks:
      - atlas-ci-net

networks:
  atlas-ci-net:

( Контейнер Nginx предназначен для реализации простого обратного прокси)

Мои первые попытки запустить контейнеры внутри контейнера Jenkins были успешными (хотя монтирование тома не производилось). Вот пример скрипта, который успешно работал в нем:

docker build -t xxx/node-build:$BUILD_NUMBER -t xxx/node-build:latest .

Вот Dockerfile, который он создавал:

FROM node

RUN npm i -g @zeit/ncc typescript

После этого я попытался запустить другое задание Jenkins (конвейер в факт), который использовал этот образ для создания проекта узла (build = объединить весь проект в файл sigle, используя ncc). Вот команда, которую я выполнил:

docker run --rm \
    -v $PWD:/app \
    -w /app \
    xxx/node-build \
    /bin/bash -c "npm run build && chmod -R 666 dist"

Но в первый раз, когда я попытался запустить этот проект, я получил следующую ошибку:

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-07-31T20_32_26_008Z-debug.log

Когда я запустил контейнер, используя -it и перечислил содержимое /app единственный файл там был package-lock.json. Затем я попытался вручную смонтировать каждый файл и папку и запустить сборку:

docker run --rm \
    -v $PWD/src:/app/src \
    -v $PWD/package.json:/app/package.json \
    -v $PWD/package-lock.json:/app/package-lock.json \
    -v $PWD/tsconfig.json:/app/tsconfig.json \
    -w /app \
    xxx/node-build \
    /bin/bash -c "npm run build && chmod -R 666 dist"

Затем я столкнулся со следующей ошибкой:

npm ERR! code EISDIR
npm ERR! syscall read
npm ERR! errno -21
npm ERR! EISDIR: illegal operation on a directory, read

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-07-31T21_27_11_736Z-debug.log

Использование -it снова для исследования. был сбит с толку, обнаружив, что все файлы и каталоги, кроме package-lock.json, были смонтированы как пустые каталоги.

Теперь, даже когда я пытаюсь использовать другие рабочие каталоги или не монтировать файлы, все эти файлы отображаются как пустые каталоги!

Что происходит? Я что-то здесь упускаю?

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