npm команда не найдена ошибка при работе docker контейнера - PullRequest
1 голос
/ 28 мая 2020

Я пробую что-то сделать с изображением gitlab-runner,

    FROM gitlab/gitlab-runner:alpine
    WORKDIR /app
    COPY . /app
    RUN apk add yarn && yarn install

    RUN yarn --version        # this layer prints 1.16.0

    RUN ng build --prod
    EXPOSE 3000
    CMD ["yarn", "run", "start"]

выше - это docker файл, который я создал

    docker build -t runner:1 .

Мне удалось создать образ успешно

    docker run -p 3000:3000 runner:1

, но когда я пытаюсь запустить контейнер, он дает мне ошибку ниже

`*FATAL: Command yarn not found.*`

не уверен в поведении, если он может установить пряжу (apk add yarn) в базовых образах и установите зависимости, используя yarn install, тогда как он не может найти команду yarn при запуске контейнера? Где я ошибаюсь.

Также в каком каталоге yarn установлена ​​в alpine?

Я знаю, что это не эффективный файл docker, но я пытаюсь сначала запустить контейнер перед его оптимизацией.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Выводит версию. Это означает, что пряжа уже установлена. Вы можете найти путь так же, как и версию.

RUN which yarn

Step 6/10 : RUN which yarn
 ---> Running in 0f633b81f2ed
/usr/bin/yarn

Мы видим, что /usr/bin/ добавлено к PATH.

 Step 7/11 : RUN echo $PATH
 ---> Running in fc3f40b6bfd9
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Но я не мог понять, почему не Не читаем пряжу из PATH.

Итак, мы явно установили PATH в нашем Dockerfile.

ENV PATH=${PATH} 

Но проблема все равно остается. Теперь нам нужно разделить пряжу и команды как ENTRYPOINT и CMD соответственно в Dockerfile.

ENTRYPOINT ["yarn"]
CMD ["run", "start"]

Обновленный Dockerfile

FROM gitlab/gitlab-runner:alpine

ENV PATH=${PATH}

WORKDIR /app
COPY . /app
RUN apk add yarn && yarn install

RUN yarn --version        # this layer prints 1.16.0
RUN ng build --prod

EXPOSE 3000
ENTRYPOINT ["yarn"]
CMD ["run", "start"]
---

$ docker run -p 3000:3000 harik8/yarn:latest 
yarn run v1.16.0
error Couldn't find a package.json file in "/app"
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Поведение базового образа выглядит необычно. Лучше бы go через него.

1 голос
/ 29 мая 2020

Для создания вашего приложения вы должны использовать не образ gitlab-runner, а образ 'node'.

Образ Gilab-runner предназначен для запуска агента gitlab, который может быть подключен к движку docker и создайте контейнер узла, в котором вы будете выполнять свою сборку, в вашем случае сборку образа docker.

Чтобы использовать gilab, вам необходимо подготовить файл gitlab-ci, в котором вы определите, какие шаги и какие 'службы 'вам нужно создать свою сборку.

Tl; dr: изменить базовый образ на node: latest и в качестве полностью отдельного рабочего средства настройки gitlab runner.

Однако, если ваша цель - иметь свое приложение для расширения gitlab runner попробуйте docker многоступенчатые сборки.

Сначала используйте образ node: latest для сборки приложения, а затем скопируйте результат сборки в gitlab-runner.

Образы среды выполнения, такие как поскольку gitlab-runner удаляется из инструментов сборки, таких как yarn или npm, поэтому ваше изображение не работает. Основная цель - сделать образы среды выполнения как можно меньше, а sdk не нужны и иногда опасны, когда дело доходит до работы на уровне производства.

...