РЕДАКТИРОВАТЬ: Итак, я смог заставить это работать ... хотя, это немного сложнее, чем просто указать путь ..
Выэто можно сделать, указав том в docker-compose.yml
. Путь к каталогу (на хосте) помечается как device
в файле compose. Кажется, что корень пути должен быть фактическим томом (возможно, будет работать общий ресурс), но «местом назначения» пути может быть каталог на указанном томе.
Я создал новый том с именем docker
на моей машине, но я полагаю, вы могли бы сделать это сваш существующий диск / том ..
Я на Mac, и этот файл docker-compose.yml
работал для меня:
version: '3.7'
services:
nodemon-test:
container_name: my-nodemon-test
image: oze4/nodemon-docker-test
ports:
- "1337:1337"
volumes:
- docker_test_app:/app # see comment below on which name to use here
volumes:
docker_test_app: # use this name under `volumes:` for the service
name: docker_test_app
driver: local
driver_opts:
o: bind
type: none
device: /Volumes/docker/docker_test_app
указанный контейнер существует в моем DockerHub. это исходный код для него, на случай, если вы беспокоитесь о чем-либо злонамеренном.Я создал его, как две недели назад, чтобы помочь кому-то еще в StackOverflow .
Показывает файлы из контейнера на моей машине (хосте) ..
Вы можете узнать больше о конфигах Docker Volume здесь , если хотите.
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Похоже, вы пытаетесь поделиться каталогом сборки с хост-машиной. После некоторого тестированияпохоже, что Docker перезапишет указанный путь в контейнере содержимым пути на хосте.
Если вы запустите docker logs my_laravel
, вы увидите ошибку об отсутствующих файлах на /var/www/site
.. Итак, даже если сборка прошла успешно - после того, как Docker установит каталог с вашего компьютера (./site
) наcontainer (/var/www/site
) перезаписывает путь в контейнере (/var/www/site
) содержимым пути на вашем хосте (./site
) - пустым.
Для проверки и проверки содержимогоиз /var/www/site
фактически перезаписываются, вы можете запустить docker exec -it /bin/bash
(вам может потребоваться заменить /bin/bash
на /bash
). Это даст вам доступ к командной строке внутри контейнера.Оттуда вы можете сделать ls -a /var/www/site
..
Кроме того, вы также можете предварительно подготовить ./site
, чтобы в нем был случайный тестовый файл (test.txt
или любой другой), затем docker-compose up -d
, затем запуститьте же команды из шага выше docker exec -it ...
и посмотрите, находится ли промежуточный файл test.txt
внутри контейнера - это дает вам убедительное доказательство того, что при запуске volumes
данные на вашем хосте перезаписывают данные в контейнере.
С учетом сказанного, будет делать что-то подобное и совместно использовать каталог журналов ... путь к тому, указанный в контейнере, все еще перезаписывается, разница в том, что контейнер записывает в негопуть ... он не зависит от конфигурационных файлов / файлов приложений.
Надеюсь, это поможет.