Развертывание стека Docker с помощью файла-компоновки приводит к недопустимой конфигурации монтирования для типа bind: исходный путь привязки не существует:

Я пытаюсь развернуть свои контейнеры и получаю эту ошибку (от docker stack ps testapp --no-trunc): invalid mount config for type "bind": bind source path does not exist: /home/john/valet/testapp. Я использую docker-compose. Я понимаю, что перед развертыванием он превращает мои относительные сопоставления томов в абсолютные, а на удаленном хосте /home/john/valet/testapp не существует.

  volumes:
        - ./:/var/www/:cached

но я не совсем уверен, как это решить.

P.S. Локально все отлично работает с docker-compose build && docker-compose up -d, а в docker hub мои автосборки тоже успешно строятся.

Отредактировано: на всякий случай добавляем репо исходного кода: https://github.com/neorganic/dockertest


person Dr. House    schedule 30.09.2019    source источник
comment
вы используете /home/john/valet/testapp в удаленном файле для создания докеров. или может быть проблема с разрешением invalid mount config for type "bind": bind mount source path does not exist: <some path> means the filesystem isn't successfully shared into the docker container.   -  person Adiii    schedule 30.09.2019
comment
@Adiii Хорошо, но как не использовать этот путь? поскольку я нигде не устанавливаю путь /home/john/valet/testapp . Сейчас я устанавливаю динамический путь $PWD:/var/www/:cached   -  person Dr. House    schedule 30.09.2019
comment
попробуйте запустить команду docker run для отладки проблемы, докеру разрешен доступ к местоположению $ PWD?   -  person Adiii    schedule 30.09.2019
comment
@Adiii Будет тестировать, но, к вашему сведению, я добавил ссылку на исходный код - может быть полезно?   -  person Dr. House    schedule 01.10.2019


Ответы (3)


Итак, настоящая проблема заключалась в том, что я не понимал, что том должен существовать на хосте, на котором я развертываю контейнеры. По какой-то причине я подумал, что это копируется / синхронизируется с моего локального устройства.

Я также пришел к выводу, что сложность размещения исходного кода в docker-swarm - это то, чего я бы предпочел не иметь, когда kubernetes решит эту проблему, поэтому я переключаюсь на kubernetesgc, если на то пошло).

person Dr. House    schedule 11.10.2019
comment
Так было и со мной: я использую docker service update my_service --image my-new-image для обновления некоторых изображений в рое. Все работало, но тома, новые тома не обновлялись. Супер странно, так как том mysql работал с самого начала. Мне нужно было остановить рой, docker stack rm my_swarm и снова развернуть с помощью docker stack deploy, что не помогало, пока я не создал папку на хосте. - person Edgar G.; 15.07.2021

Все, что вам нужно сделать, это указать правильный путь для вашего тома. Вы можете создать отдельный файл и назвать его docker-compose-production.yml.

volumes:
  - /srv/data/www/:/var/www/

Также имейте в виду, что для производственных систем вы хотите использовать режим swarm (docker swarm init) и применять изменения stach с помощью docker swarm deploy.

Параметр :cached применим только к системам OSX, и, скорее всего, вы используете ОС на базе Linux в производственной среде.

person achempion    schedule 04.10.2019

попробуйте изменить это на:

- $PWD:/var/www/:cached

Я думаю, вам нужен полный путь здесь

person LinPy    schedule 30.09.2019
comment
Только что попробовал - такая же проблема. В любом случае он фактически отображал полный путь во время развертывания, проблема в том, что путь, который у меня есть локально /home/john/valet/testapp/. не существует на удаленном хосте. - person Dr. House; 30.09.2019
comment
$ PWD будет изменен в зависимости от локального каталога, который не будет / home / john / valet / testapp / в других местах, изображение не имеет к этому никакого отношения, поскольку тома - это директива времени выполнения. Просто убедитесь, что вы нажимаете / вытягиваете изменения в вашем докере - person LinPy; 30.09.2019
comment
почему вы монтируете весь $PWD в папку cached, это включает все папки, включая то, что находится в /php-fpm/php7.2.ini и других местах ..... - person LinPy; 30.09.2019