Файлы контейнера не обновляются при изменении с сопоставленного тома хоста

У меня есть следующее docker-compose.yml:

version: '3'

services:
  web:
    build: 
      context: .
      dockerfile: ./.docker/node.dockerfile
    volumes:
      - D:\Proj\Web:/app
    ports:
      - '3000:3000'
    depends_on: 
      - 'db'
    networks:
      - holder-network
    restart: on-failure
    tty: true


  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - holder-network
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: P@ssw0rd
      MYSQL_DATABASE: holder_db
      MYSQL_USER: holder_usr
      MYSQL_PASSWORD: P@ssw0rd


networks:
  holder-network:
    driver: bridge

volumes:
  db_data:

И node.dockerfile:

FROM node:7.10

MAINTAINER Juliano Nunes

RUN mkdir /var/www

RUN npm install nodemon -g

WORKDIR /var/www

ADD . /var/www

RUN npm install

CMD nodemon

Я меняю файлы под D:\Proj\Web с хоста, однако файлы в контейнере не обновляются. Почему?


person Juliano Nunes Silva Oliveira    schedule 21.05.2017    source источник


Ответы (2)


Я нашел ошибку. Мой docker-compose.yml использовал /app в качестве пути, а node.dockerfile использовал /var/www.

Вот обновленная (рабочая) версия:

version: '3'

services:
  web:
    build: 
      context: .
      dockerfile: ./.docker/node.dockerfile
    volumes:
      - D:\Proj\Web:/var/www
    ports:
      - '3000:3000'
    depends_on: 
      - 'db'
    networks:
      - holder-network
    restart: on-failure
    tty: true


  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - holder-network
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: P@ssw0rd
      MYSQL_DATABASE: holder_db
      MYSQL_USER: holder_usr
      MYSQL_PASSWORD: P@ssw0rd


networks:
  holder-network:
    driver: bridge

volumes:
  db_data:
person Juliano Nunes Silva Oliveira    schedule 22.05.2017
comment
Та же проблема, то же решение. Спасибо! - person Ben; 01.06.2017

Чтобы сопоставить том хоста в контейнере, работающем в докере для Windows, вам необходимо убедиться, что ваш диск используется во встроенной виртуальной машине. В противном случае каталог будет смонтирован из файловой системы виртуальной машины, которая в этом месте будет пустой. Вам нужно зайти в настройки докера в Windows и добавить диск D в список общих каталогов. См. документацию по докеру здесь: https://docs.docker.com/docker-for-windows/#shared-drives

person BMitch    schedule 22.05.2017
comment
Диск уже доступен в настройках Docker. В контейнере директория не пустая, файлы копируются при запуске контейнера, однако если я редактирую файлы из винды (хоста), то изменения не отражаются в госте. - person Juliano Nunes Silva Oliveira; 22.05.2017
comment
Docker не копирует файлы при запуске контейнера, это сопоставление каталога непосредственно с контейнером. Какие команды вы используете для проверки того, что файлы изначально обновляются, но позже остаются в прежнем состоянии? - person BMitch; 22.05.2017
comment
Я обнаружил, что в моем docker-compose.yml я ссылался на другой путь, чем node.dockerfile. Это была моя ошибка. - person Juliano Nunes Silva Oliveira; 22.05.2017