Ошибка при использовании docker -машины, но не на сервере s sh: вы пытаетесь смонтировать каталог в файл (или наоборот)? - PullRequest
0 голосов
/ 20 января 2020

Я запускаю докеризованное приложение django с nginx на сервере Ubuntu (ec2-instance). Моя идея состоит в том, чтобы развернуть с помощью docker -машина.

Когда я sh захожу в свой EC2 и копирую там свое приложение, а затем раскручиваю свой docker -компонентный файл, все работает хорошо, и приложение работает отлично. Но я хотел бы раскрутить свой контейнер без s sh входа на сервер, но с использованием машины docker.

Когда я указываю свои команды выполнения на мой экземпляр EC2 и запускаю ту же команду (docker-compose -f production.yml up --build) Я получаю следующую ошибку:

Невозможно запустить производство службы- nginx -контейнер: Ошибка создания среды выполнения OCI: container_ linux. go: 346: запуск процесса контейнера вызван "process_ linux. go: 449: вызвана инициализация контейнера \ "rootfs_ linux. go: 58: монтирование \\" / Users / myuser / myfolder / myproject / compose / production / nginx / myconf.conf \\ "для корневой файловой системы \\" / Var / Библиотека / грузчик / overlay2 / 44675a2cf4ac6e3052c9df3bd6fbb35b1ece33736d632199572c6a1c90965c12 / слиты \\ "в \\" / Var / Библиотека / грузчик / overlay2 / 44675a2cf4ac6e3052c9df3bd6fbb35b1ece33736d632199572c6a1c90965c12 / слиты / и т.д. / Nginx / conf.d / default.conf \ \ "вызвал \\" не каталог \\ "\" ": unknown: вы пытаетесь смонтировать каталог в файл (или наоборот)? Проверьте, существует ли указанный путь к хосту и соответствует ли он ожидаемому типу

Я думаю, что строка, на которую docker жалуется, это:

- ./compose/production/nginx/myconf.conf:/etc/nginx/conf.d/default.conf

Я пытаюсь сопоставить мою конфигурацию из моего nginx файла с конфигурацией по умолчанию контейнера nginx docker. myconf.conf есть и это файл.

Я предполагаю, что есть проблема при монтировании файла с моего локального компьютера в контейнер на сервере? Но я понятия не имею, как я мог это исправить .... Кроме того, другие вопросы по этой ошибке меня никуда не приводят.

Разве команда, которую я запускаю с docker машиной, указывающей на экземпляр, не должна делать то же самое, что и когда я sh запускаю свой экземпляр и запускаю его оттуда? К сожалению, мои знания docker ограничены. Если бы кто-то мог протянуть мне руку помощи, я был бы очень благодарен.

Большое спасибо заранее и, пожалуйста, посмотрите мою конфигурацию в следующем:

production-nginx-container:
    container_name: 'production-nginx-container'
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./compose/production/nginx/myconf.conf:/etc/nginx/conf.d/default.conf
      - /etc/letsencrypt/live/mydomain.de/fullchain.pem:/etc/letsencrypt/live/mydomain.de/fullchain.pem
      - /etc/letsencrypt/live/mydomain.de/privkey.pem:/etc/letsencrypt/live/mydomain.de/privkey.pem
    depends_on:
      - django


1 Ответ

1 голос
/ 20 января 2020

Даже если вы используете удаленный $DOCKER_HOST Docker не может подключить локальный контент к удаленному контейнеру. Опции docker run -v и Docker Compose volumes: bind mounts всегда считаются путями на хосте, на котором работает демон Docker, а не там, где вы запускаете команду docker. Вам нужно будет скопировать такие файлы, как файлы конфигурации и сертификаты TLS, на удаленный хост, и к тому времени, когда вы это сделаете, вы также можете просто использовать s sh для запуска контейнера.

Возможно, вы решите, подходит ли вам такой инструмент автоматизации, как Ansible, Chef или Salt Stack. Как правило, они имеют встроенные инструменты для «убедитесь, что этот файл находится в удаленной системе» и «запустить этот контейнер в некоторой удаленной системе». Я бы не рекомендовал использовать Docker Machine, за исключением указанного c случая необходимости локальной виртуальной машины для запуска Docker (обычно через приложение Docker Toolbox, в Windows 7 или других средах, где нет ' «родное» Docker приложение, которое вы можете использовать).

...