Приложение узла не запустится в Docker, если есть общий том

#node.js #docker #gatsby

#node.js #docker #gatsby

Вопрос:

Я создал локальный веб-сайт Gatsby. Затем я настраиваю контейнер Docker для его запуска. Это стандартная настройка: копирование package.json , установка модулей, копирование локальных файлов и запуск сценария разработки с общего тома.

Но когда он запускается, я сталкиваюсь с ошибкой :

 gatsby_1     |  ERROR
gatsby_1     |
gatsby_1     | There was a problem loading the local develop command. Gatsby may not be installed in your site's "node_modules" directory. Perhaps you need to run "npm install"? You might need to delete your "package-lock.json" as well.
  

Вот Dockerfile :

 FROM node:14.11.0

RUN npm install -g gatsby-cli

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8000
CMD ["gatsby", "develop", "-H", "0.0.0.0"]
  

И docker-compose.yml :

 version: "3"

services:
  db:
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./db:/var/lib/mysql

  adminer:
    image: adminer:latest
    ports:
      - 8082:8080

  wordpress:
    image: wordpress:5.5.1-php7.4-apache
    ports:
      - 8081:80
    volumes:
      - ./wordpess/plugins:/var/www/html/wp-content/plugins
      - ./wordpess/themes:/var/www/html/wp-content/themes

  gatsby:
    build: ./gatsby
    ports: 
      - 8080:8000
    volumes:
      - ./gatsby:/app
  

Но, если я удалю том для контейнера Gatsby, все будет работать хорошо.

Итак, я предполагаю, что где-то что-то не так с разрешениями, но я не могу понять это.

Вот репозиторий со всем проектом.

Комментарии:

1. Да, содержимое volumes: /app каталога перезаписывается содержимым из вашей локальной файловой системы, и в основном все, что делает ваш Dockerfile, полностью игнорируется. Вы можете безопасно удалить этот блок, чтобы запустить код, который фактически встроен в образ.

2. Я не уверен, что это так. Как насчет развертывания продукта, где мы просто используем buit-образ, и нет кода для совместного использования, и нет тома, установленного в docker-compose.yml ? Мне придется использовать другой Dockerfile juste для prod?