Я создал очень простой файл докеров для своего веб-приложения nodejs:
FROM node:8.11.4
FROM mysql:latest
WORKDIR /ess-explorer
COPY . .
RUN npm install
RUN cd config && cp config.json.example config.json && cp database.json.example database.json && cd ../
RUN npm run migrate
EXPOSE 3000
CMD ["npm", "dev"]
И docker.yml
version: '3'
services:
essblockexplorer:
container_name: ess-explorer
build: .
depends_on:
- db
privileged: true
ports:
- 3000:3000
- 3010:3010
db:
container_name: mysql
image: mysql
restart: always
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: '123'
volumes:
db-data:
После команды docker-compose -f docker.yml build в любое время у меня возникла ошибка
Step 5/9 : RUN npm install
---> Running in d3644d792807
/bin/sh: 1: npm: not found
ERROR: Service 'essblockexplorer' failed to build: The command '/bin/sh -c npm install' returned a non-zero code: 127
Что я делаю неправильно? Я обнаружил похожие проблемы, но не нашел реального решения для решения этой проблемы.
Я думаю, у вас не может быть двух таких FROM. Таким образом, используется только образ mysql, и у него нет npm. Взгляните на docs.docker.com/develop/develop-images/multistage-build
@ L.Faros У меня не было ошибок при установке двух контейнеров, и я вижу изображения mysql latest 2dd01afbe8df 5 days ago 485MB и node 8.11.4 8198006b2b57 7 weeks ago 673MB
Да, это не вызывает никаких ошибок и извлекает оба изображения, но команды после FROM будут использовать только последний образ, а не оба.





Вам вообще не нужен образ mysql в вашем Dockerfile; в идеале ваш контейнер приложения (essblockexplorer) обращается к контейнеру db (db) через клиент NodeJS. Все, что вам нужно сделать, это;
FROM mysql:latest из вашего Dockerfile.db) в качестве имени хоста (оно автоматически загружается как псевдоним в ваш контейнер).
@Veve Я скопировал пример с официального сайта nodejs nodejs.org/en/docs/guides/nodejs-docker-webapp