Как подключить один файл в томе


Я пытаюсь докеризировать 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 71

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 имеют значение.