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