поведение тома docker-compose - PullRequest
0 голосов
/ 06 июля 2018

Использование docker-compose приводит к несоответствию в поведении с томами.

Я использую nginx:1.15-alpine, если я смонтирую /var/log/nginx, у nginx нет проблем с созданием /var/log/nginx/error.log, но если я смонтирую /var/log, nginx не сможет создать /var/log/nginx/error.log.

Работает

webserver:
  image: nginx:1.15-alpine
  ports:
    - '80:80'
  volumes:
    - /mnt/fs/webserver/nginx:/etc/nginx/conf.d
    - /mnt/fs/webserver/log:/var/log/nginx

Не работает

webserver:
  image: nginx:1.15-alpine
  ports:
    - '80:80'
  volumes:
    - /mnt/fs/webserver/nginx:/etc/nginx/conf.d
    - /mnt/fs/webserver/log:/var/log

Я знаю, что монтировать каталог, не содержащий других каталогов, не требуется, поскольку я могу успешно смонтировать /var/www/html в контейнере Wordpress в том, /var/www/html содержит подкаталоги.

При использовании конфигурации Не работает nginx имеет следующую ошибку:

nginx: [alert] не удалось открыть файл журнала ошибок: ошибка open () "/var/log/nginx/error.log" (2: такой файл или каталог отсутствует)

Почему монтаж /var/log/nginx работает, а монтаж /var/log не работает?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018
        Works
        ----------------------------------
        webserver:
          image: nginx:1.15-alpine
          ports:
            - '80:80'
          volumes:
            - /mnt/fs/webserver/nginx:/etc/nginx/conf.d
            - /mnt/fs/webserver/log:/var/log/nginx

        Does Not Work
        ----------------------------------
        webserver:
          image: nginx:1.15-alpine
          ports:
            - '80:80'
          volumes:
            - /mnt/fs/webserver/nginx:/etc/nginx/conf.d
            - /mnt/fs/webserver/log:/var/log

    -------------------------------

Both Work if you given proper permission to /mnt/fs/webserver/log
Just set permission sudo chmod 777 -R /mnt/fs/webserver/log
After that try rebuilding image it works for me...

If that not work try using 
sudo chown -R $USER:$USER /mnt/fs/webserver/log
or
sudo chown -R $USER:$UID /mnt/fs/webserver/log
0 голосов
/ 06 июля 2018

Если вы создадите пустой каталог на хосте и смонтируете его в /var/log на контейнере, тогда /var/log в контейнере будет пустым каталогом хоста. Если вы затем попытаетесь записать в /var/log/nginx/error.log, ничто не создало промежуточный каталог nginx, и вы получите ошибку «нет такого файла или каталога».

Либо подключите том непосредственно к целевому каталогу, либо создайте промежуточный каталог в каталоге хоста (с соответствующими разрешениями) перед запуском контейнера:

mkdir /mnt/fs/webserver/log/nginx
chmod 0777 /mnt/fs/webserver/log/nginx
...