Как подключить один файл в томе
Я пытаюсь докеризировать php-приложение. В dockerfile я загружаю архив, извлекаю его и т. д.
все работает нормально, однако если новая версия будет выпущена, и я обновляю dockerfile мне нужно переустановить приложение, потому что конфигурация.php перезаписывается.
поэтому я подумал, что могу подключить файл Как том, как я делаю с базой данных.
я попробовал это двумя способами, с громкостью и прямой путь.
docker-compose:
version: '2'
services:
app:
build: src
ports:
- "8080:80"
depends_on:
- mysql
volumes:
- app-conf:/var/www/html/upload
- app-conf:/var/www/html/config.php
environment:
DB_TYPE: mysql
DB_MANAGER: MysqlManager
mysql:
image: mysql:5.6
container_name: mysql
volumes:
- mysqldata:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_PASSWORD:
volumes:
mysqldata:
app-conf:
что приводит к ошибке:
и я попробовал его с заданным путем, как смонтированный том.
/src/docker/myapp/upload:/var/www/html/upload
/src/docker/myapp/upload:/var/www/html/config.php
однако оба способа не работают. С подключенным Томом я вижу, что загрузка создается.
но затем терпит неудачу с
/var/www/html / config.php "вызвал \" не каталог\"""
Если я попробую его с /ГРЦ/настройки/приложение/загрузки/конфигурации.php:/var/www/html/config.php
Docker создает папку загрузки, а затем конфигурацию.папка php. Это не досье.
или есть другой способ сохранить конфигурацию?
4 ответа:
Тома файлов выполняются таким образом в docker (пример абсолютного пути (можно использовать переменные env), и вам нужно указать имя файла):
volumes: - /src/docker/myapp/upload:/var/www/html/upload - /src/docker/myapp/upload/config.php:/var/www/html/config.php
вы также можете сделать:
volumes: - ${PWD}/upload:/var/www/html/upload - ${PWD}/upload/config.php:/var/www/html/config.php
Если вы запустите docker-compose from
/src/docker/myapp
папку
Я страдал от подобной проблемы. Я пытался импортировать мой файл config в мой контейнер, так что я могу исправить это каждый раз, когда мне нужно, без повторного построения изображения.
Я имею в виду, что я думал, что команда ниже будет отображать
$(pwd)/config.py
от узла Docker до/root/app/config.py
в контейнер в виде файла.docker run -v $(pwd)/config.py:/root/app/config.py my_docker_image
тем не менее, он всегда создавал каталог с именем
config.py
, а не файл.в поисках подсказки, я нашел причину(от здесь)
если вы используете-v или --volume для привязки-монтировать файл или каталог, который делает еще не существует на узле Docker,- v создаст конечную точку для вас. он всегда создается как каталог.
поэтому он всегда создается как каталог, потому что мой узел docker не имеет
$(pwd)/config.py
.даже если я создаю config.py в докер хост.
$(pwd)/config.py
just overwirte/root/app/config.py
Не экспорт/root/app/config.py
.
для меня проблема заключалась в том, что у меня была сломанная символическая ссылка на файл, который я пытался смонтировать в контейнер
у меня такая же проблема на моем Windows 8.1
оказалось, что это было связано с чувствительностью к регистру пути. Я позвал
docker-compose up
из каталогаcd /c/users/alex/
и внутри контейнера файл был превращен в каталог.но когда я это сделал
cd /c/Users/alex/
(Не пользователи заглавными буквами) и называетсяdocker-compose up
оттуда это сработало.в моей системе оба пользователя dir и Alex dir заглавными буквами, хотя кажется, что только пользователи dir имеют значение.