Dockerfile
никогда не сможет получить доступ к базе данных, томам или другим ресурсам, объявленным в docker-compose.yml
(за пределами непосредственного блока build:
этой службы). Сборка проходит как отдельный этап; он не подключается к сети Compose.
(Представьте себе, что на одной системе запущено docker build; docker push
, а на второй системе указано соответствующее значение image:
. В этой настройке система времени сборки не может получить доступ к базе данных времени выполнения, и это базовая модель c, которую вы должны иметь в виду. Более конкретно, вы можете удалить и воссоздать свой контейнер mysql
без перестройки своего auth
образа.)
Типичная Чтобы сделать эту работу, нужно написать скрипт точки входа. Это становится основной командой вашего контейнера; он получает Dockerfile CMD
(или Docker Compose command:
) в качестве аргументов командной строки. Поскольку он запускается в момент запуска контейнера, он имеет доступ к базе данных, сетям, переменным среды, et c.
#!/bin/sh
set -e # Stop on any error
npm run migrate # Run migrations
npm run seed # Preload initial data
exec "$@" # Run the command as the main container process
В вашем Dockerfile
поместите этот скрипт как ENTRYPOINT
. Вы должны использовать JSON форму массива ENTRYPOINT
здесь.
FROM node:12.14.0
WORKDIR /var/www
# Install dependencies first to save time on rebuild
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3001
RUN chmod +x entrypoint.sh # if required
ENTRYPOINT ["./entrypoint.sh"]
CMD ["npm", "start"]