Не удается смонтировать файл как том в docker-создать после выходных, почему?

#windows #docker #docker-compose

#Windows #docker #docker-compose

Вопрос:

Сегодня я получил новую ошибку в моей среде docker. Я только что запустил свой проект (контейнеры Web, Php и Postgres), но контейнер Nginx не запустился, потому что site.conf, который я монтирую с томами, является «каталогом».

В прошлую пятницу все было нормально и у меня хорошо получалось. В этом случае я ничего не меняю. ; (

Я создал дополнительный файл docker-compose, где вы можете попытаться воспроизвести мою ошибку.

docker-создать файл:

 version: "3"

services:
  nginx:
    container_name: nginxCr
    image: nginx:1.15.7
    ports:
      - "80:80"
    volumes:
      - .:/var/www
      - ./site.conf:/etc/nginx/conf.d/site.conf
  

site.conf может быть пустым для тестирования.

после docker-compose up -d контейнер не запускается.

журналы docker nginxCr содержат следующее:

2019/03/04 14:49:25 [crit] 1#1: сбой pread() «/etc/nginx/conf.d/site.conf» (21: это каталог) nginx: сбой [crit] pread() «/etc/nginx/conf.d/site.conf» (21: это каталог)

Каким-то образом запустите docker (docker compose) в каталог создания вместо того, чтобы связывать мой конфигурационный файл.

У меня Windows 10 Pro (сборка 17134)

Версия Docker 18.09.2, сборка 6247962

версия docker-compose 1.23.2, сборка 1110ad01

ОБНОВЛЕНИЕ: Проблема, похоже, только в Windows … на моем Nix-сервере все работает нормально

Комментарии:

1. ОБНОВЛЕНИЕ 2: я получил 3 обновления «Определения» для защитника Windows после пятницы

Ответ №1:

решение состояло в том, чтобы uncheck -> apply

и затем

check -> apply жесткий диск в разделе «Общие драйверы» в Docker-Настройки

* facepalm*

Ответ №2:

Храните свои www файлы в папке sperate, а не . . Создайте файл компоновки, подобный приведенному ниже:

 services:
  nginx:
    container_name: nginxCr
    image: nginx:1.15.7
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www
      - ./site.conf:/etc/nginx/conf.d/site.conf
  

Итак, в вашем текущем рабочем каталоге у вас должна быть папка с именем www (чтобы вам не пришлось объединять тома) и файл с именем site.conf . Даже если это пустой файл, он должен быть у вас в каталоге. В противном случае docker будет создана папка с таким именем.

В случае, если у вас есть папка с именем site.conf , удалите эту папку и выполните touch site.conf , затем выполните docker-compose up -d

Комментарии:

1. нет, это не решение; ( 2019/03/04 15:20:31 [crit] 1#1: сбой pread() «/etc/nginx/conf.d/site.conf» (21: это каталог) nginx: [crit] сбой pread() «/etc/nginx/conf.d/site.conf» (21: это каталог)

2. я имею в виду, конечно, что я могу создать файл docker, который делает touch, link и другие вещи, и это может / будет решением, каким-то образом .. Моя первая проблема — почему это не работает, Вторая — в пятницу это работало, сегодня нет, почему?!

3. Все, что вы предоставляете в своем dockerfile, отразится на образе, который вы создаете, но когда вы монтируете том, вы создаете соединение между вашим хостом и вашим контейнером. Итак, вам необходимо иметь файл на вашем хостинге (если вы монтируете файл). В противном случае вы можете смонтировать всю папку

4. Можете ли вы опубликовать свою текущую структуру папок, тогда мы сможем проанализировать, почему вы столкнулись с проблемой

5. Папка проекта/docker-compose.yml, папка проекта /site.conf и новая папка проекта/www