Docker-Compose — невозможно изменить working_directory

#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 .