#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