У меня есть среда разработки, которую я докерирую, и я хотел бы иметь возможность перезагружать мои изменения без необходимости перестраивать образы докеров. Я использую docker compose, потому что redis является одной из зависимостей моего приложения, и мне нравится иметь возможность связать контейнер redis
У меня есть два контейнера, определенные в моем docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Я дошел до того момента, когда node
в файле докеров моего приложения добавляю том, но как мне смонтировать каталог хоста в том, чтобы все мои живые изменения кода отражались в контейнере?
Вот мой текущий Dockerfile:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN npm install
# Expose port
EXPOSE 8080
# Run app using nodemon
CMD ["nodemon", "/app/app.js"]
Мой проект выглядит так:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
docker
docker-compose
docker-volume
Амин Шах Гилани
источник
источник
Error: Cannot find module '/data/app.js'
/app/
почему ваш CMD указывает на/data
Error: Cannot find module 'express'
я собираюсь попробовать кое-что.- .:c:/app
(это меняЕсть несколько вариантов
Краткий синтаксис
Используя
host : guest
формат, вы можете выполнять одно из следующих действий:Длинный синтаксис
Начиная с docker-compose v3.2 вы можете использовать длинный синтаксис, который позволяет настраивать дополнительные поля, которые могут быть выражены в краткой форме, например
mount type
(volume, bind или tmpfs) иread_only
.Посетите https://docs.docker.com/compose/compose-file/#long-syntax-3 для получения дополнительной информации.
источник
Если вы хотите смонтировать конкретный каталог хоста (
/disk1/prometheus-data
в следующем примере) как том вvolumes
разделе файла Docker Compose YAML, вы можете сделать это, как показано ниже, например:Кстати, в Dockerfile Prometheus вы можете найти
VOLUME
инструкцию, как показано ниже, которая отмечает, что он содержит внешние тома, смонтированные с собственного хоста и т. Д. (Однако обратите внимание: эта инструкция не является обязательной, хотя для монтирования тома в контейнер.) :Dockerfile
Refs:
источник
local
типу драйвера?local
driver_opts: o: bind type: none
?local
драйвер в Linux принимает параметры, аналогичные команде монтирования linux: man7.org/linux/man-pages/man8/mount.8.html . Вы можете найти более подробное обсуждение в github.com/moby/moby/issues/19990#issuecomment-248955005 и stackoverflow.com/questions/35841241/...Это были две вещи:
Я добавил объем в
docker-compose.yml
:Я переместил
npm install && nodemon app.js
части в a,CMD
потому чтоRUN
добавляет элементы в файловую систему Union, а мой том не является частью UFS.источник
мы должны создать свой собственный том докера, сопоставленный с каталогом хоста, прежде чем упоминать в docker-compose.yml как внешний
1.Создайте том с именем share
2. Используйте его в своем docker-compose
Таким образом, мы можем использовать один и тот же каталог для множества служб, работающих в разных контейнерах.
источник