Невозможно смонтировать файлы в Docker - PullRequest
0 голосов
/ 28 мая 2018

Описание ошибки

Я не могу смонтировать файлы в Vagrant или Docker, поэтому похоже, что это проблема, вызванная какой-то ошибкой разрешения.
Моя ОС Ubuntu 18.04 LTS (Bionic Beaver), яНасколько мне известно, я не запускаю никаких модулей контроля доступа, таких как SELinux.

Обсуждение ошибки, связанной с Vagrant, можно найти в другом вопросе: Невозможно смонтировать файлы в Vagrant

Устранение неполадок Docker

Я не могу смонтировать файлы в контейнер Docker с помощью docker-compose, я пытаюсь собрать: https://github.com/fredrikaverpil/saltstack-docker

Я установилмои тома в файле docker-compose:

volumes:
  - ${PWD}/assets/master/etc/supervisor:/etc/supervisor
  - ${PWD}/assets/master/etc/salt:/etc/salt
  - ${PWD}/assets/master/var/cache/salt:/var/cache/salt
  - ${PWD}/assets/master/var/log/salt:/var/log/salt
  - ${PWD}/assets/master/srv:/srv

Тем не менее, я получаю этот вывод при запуске docker-compose up:

Creating network "saltstack_default" with the default driver
Creating salt_image
Creating salt
Creating minion
Attaching to salt, minion, salt_image
salt      | Error: could not find config file /etc/supervisor/supervisord.conf
salt      | For help, use /usr/bin/supervisord -h
salt exited with code 2
salt_image exited with code 0
minion    | [ERROR   ] DNS lookup of 'salt' failed.
minion    | [ERROR   ] Master hostname: 'salt' not found. Retrying in 30 seconds

docker inspect, когда контейнер показывает правильную конфигурацию:

   "Mounts": [
        {
            "Type": "bind",
            "Source": "/somedir/saltstack/assets/master/etc/salt",
            "Destination": "/etc/salt",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/somedir/saltstack/assets/master/var/cache/salt",
            "Destination": "/var/cache/salt",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/somedir/saltstack/assets/master/etc/supervisor",
            "Destination": "/etc/supervisor",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/somedir/saltstack/assets/master/var/log/salt",
            "Destination": "/var/log/salt",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/somedir/saltstack/assets/master/srv",
            "Destination": "/srv",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        }

Но вход в контейнер (с другой командой точки входа) показывает, что файлы, которые должны быть подключены, отсутствуют:

[root@salt /]# ll /etc/supervisor
total 0
[root@salt /]# ll /etc/salt
total 0
[root@salt /]# ll /var/cache/salt
total 0
[root@salt /]# ll /var/log/salt
total 0
[root@salt /]# ll /srv
total 0

Заключение

Кажется, что-то очень запутано на моей локальной машине, когда дело доходит до копирования oveФайлы r, возможно, связаны с тем, как настроен мой пользователь, и как он имеет доступ к монтированию файлов в виртуальные машины и контейнеры.
Если кто-то может пролить свет на это, я буду признателен.

Обновления

Обновление 1

Я подозреваю, что это проблема со старым материалом в /var/lib/docker, который я собираюсь удалить, но перед этим я получаю еще одну ошибку, возможно, некоторуюошибка разрешения:

> cat docker-compose.yml 
# based on https://docs.docker.com/samples/library/nginx/#using-environment-variables-in-nginx-configuration
version: '2'

services:
  web:
    image: nginx
    volumes:
     - ./testfile.txt:/etc/nginx/
    ports:
     - "8080:80"
    environment:
     - NGINX_HOST=foobar.com
     - NGINX_PORT=80
    command: /bin/bash -c "nginx -g 'daemon off;'"

> docker-compose up
Creating network "docker_compose-mounting_issue_default" with the default driver
Creating docker_compose-mounting_issue_web_1 ... error

ERROR: for docker_compose-mounting_issue_web_1  Cannot start service web: b'OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \\"rootfs_linux.go:58: mounting \\\\\\"/home/.../troubleshoot/docker_compose-mounting_issue/testfile.txt\\\\\\" to rootfs \\\\\\"/var/lib/docker/aufs/mnt/580b79241399e838c67b74021ecf2597aade5f1711811f4ab5c9c7bbcd188449\\\\\\" at \\\\\\"/var/lib/docker/aufs/mnt/580b79241399e838c67b74021ecf2597aade5f1711811f4ab5c9c7bbcd188449/etc/nginx\\\\\\" caused \\\\\\"not a directory\\\\\\"\\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type'

ERROR: for web  Cannot start service web: b'OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \\"rootfs_linux.go:58: mounting \\\\\\"/home/.../troubleshoot/docker_compose-mounting_issue/testfile.txt\\\\\\" to rootfs \\\\\\"/var/lib/docker/aufs/mnt/580b79241399e838c67b74021ecf2597aade5f1711811f4ab5c9c7bbcd188449\\\\\\" at \\\\\\"/var/lib/docker/aufs/mnt/580b79241399e838c67b74021ecf2597aade5f1711811f4ab5c9c7bbcd188449/etc/nginx\\\\\\" caused \\\\\\"not a directory\\\\\\"\\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type'
ERROR: Encountered errors while bringing up the project.

Обновление 2

Итак, я удалил все в /var/lib/docker/ и теперь он работает как надо, монтируя мои файлы.Вероятно, он был где-то сломан.Еще одно предложение, с которым я столкнулся, - предоставление разрешений для каталога, chmod 777, похоже, помогло некоторым пользователям, но я не думаю, что это так безопасно.

1 Ответ

0 голосов
/ 07 июня 2018

какое разрешение для папки есть у пользователя (в которое вы вошли, запустите команду docker-compose), если это пользователь root или у пользователя есть доступ к папкам, и, пожалуйста, измените $ {PWD} на соответствующий/ абсолютный путь к папке (тот, который вы хотите смонтировать в контейнер).docker-compose не может понять переменную $ {PWD} env.

Пример: если вы хотите смонтировать

$ {PWD} / assets / master / etc / supervisor: / etc/ supervisor

должно быть

. / assets / master / etc / supervisor: / etc / supervisor

...