#docker #docker-compose
#docker #docker-compose
Вопрос:
В моем Dockerfile я устанавливаю рабочий каталог с помощью: WORKDIR /usr/src/app
, а затем позже в файле мне нужно обновить его WORKDIR /usr/src/app/src/front
, чтобы запустить некоторые дополнительные команды сборки.
Теперь в моем docker-compose , когда я хочу запустить что-то конкретное npm run api
, это должно быть сделано из /usr/src/app
. Поскольку я обновил WORKDIR в самом Dockerfile, я пытался обновить рабочий каталог, используя следующее в моем docker-compose, однако, похоже, он не перемещается в этот конкретный каталог — я вижу ошибку, в которой указано, что он не может найти npm run start
, и просматриваю его в каталоге /usr/src/app
, а /usr/src/app/src/front
не как ямы указали с working_dir
version: '3.4'
services:
front:
image: myimage
working_dir: /usr/src/app/src/front
ports:
- 3000:3000
command: ["npm", "run", "start"]
Возможно ли вообще обновить working_dir, как я пытаюсь?
Мой Dockerfile выглядит так:
FROM node:12.18-alpine
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Build the frontend
RUN cd /usr/src/app/src/front
amp;amp; npm install
amp;amp; npm run build
COPY . .
Спасибо.
Комментарии:
1. Да, это именно тот синтаксис . Можете ли вы предоставить более полный пример с Dockerfile и ошибкой, которую вы получаете?
2. Пожалуйста, опубликуйте выходные данные со всеми сообщениями об ошибках. Вы пробовали что-то вроде
ls -lah
as command и/tmp
as workdir, просто чтобы посмотреть, работает ли это?
Ответ №1:
Да, можно переопределить WORKDIR
, а также некоторые другие директивы Dockerfile ( ENTRYPOINT
, CMD
) при запуске с docker run
помощью или in docker-compose.yml
. Вы выполнили перезапись прямо в примере, поэтому проблема в другом месте.
Также обратите внимание, что вы можете просто cd
временно изменить рабочий каталог в Dockerfile. Например:
RUN cd /usr/src/app
amp;amp; npm run build
amp;amp; cd src/front
amp;amp; npm run build
# and so on
При использовании WORKDIR
вы устанавливаете рабочий каталог по умолчанию. Хорошо указывать, где находится корень вашего приложения, но довольно необычно использовать его для создания образа.
Комментарии:
1. Спасибо — я думаю, что использование WORKDIR дважды в моем Dockerfile вызывало некоторые проблемы. Я обновил его, чтобы выполнить вышеуказанное
RUN cd src/front amp;amp; npm run build
. Посмотрим, поможет ли это в выполнении WORKDIR в docker-compose вместо этого2. @userMod2 Как я уже сказал, вы хорошо выполнили переопределение и успешно изменили workdir в третий раз с помощью docker-compose. Если есть ошибка — добавьте ее в вопрос вместе с файлом Dockerfile, если вы можете себе это позволить.
3. @anemtye — Я обновил исходное сообщение полным кодом mre. Спасибо
4. @userMod2 запустите это
docker-compose run --entrypoint="" front ash
. Это приведет вас в оболочку контейнера. Попробуйте использовать консольные команды для запуска сервера вручную и устранения проблемы.5. При выполнении этого и запуске
npm run start
он работает так, как ожидалось, когда я делаю это локально. В Azure, где я запускаю это, оно продолжает отображатьсяmissing script: start
.