#docker #docker-compose
#docker #docker-compose
Вопрос:
Я новичок в docker и пытаюсь создать стек LAMP с помощью docker-compose. Я нашел там хороший учебник. Я думаю, что понял разницу между томами и монтированием привязки, однако, я предполагаю, что в какой-то момент я столкнулся с проблемой. Я хочу сделать одну из моих папок доступной для стека LAMP (мои источники, находящиеся в папке «src»). Однако исходные файлы не видны в папке /var/www/html .
Мой файл docker-compose выглядит следующим образом:
version: "3.7"
services:
mariadb:
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "no"
MYSQL_DATABASE: testdb
MYSQL_PASSWORD: testpassword
MYSQL_ROOT_PASSWORD: rootpwd
MYSQL_USER: testuser
TZ: Europe/Rome
image: "mariadb:10.5.2"
volumes:
- "mariadb-volume:/var/lib/mysql"
php-httpd:
image: "php:7.3-apache"
ports:
- "80:80"
volumes:
- ./src/:/var/www/html/
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- "mariadb:db"
ports:
- "8081:80"
volumes:
mariadb-volume: ~
Phpmyadmin работает просто отлично, также docker-compose запускается без каких-либо предупреждений. Моя команда создания
docker-compose up -d --force-recreate
Интересно, что когда я меняю «./src/» на «./DocumentRoot», на моем хост-компьютере создается папка DocumentRoot. Однако при размещении файлов в DocumentRoot на хосте или в /var/www/html в docker файлы не отображаются на docker или хосте соответственно. Тем не менее, я могу с уверенностью сказать, что я, по крайней мере, нахожусь в нужном каталоге.
Есть ли какой-нибудь трюк или параметр, который мне нужно передать, чтобы позволить docker просматривать файлы на моем хосте?
Ответ №1:
Хах … еще раз спасибо. Ваш вопрос вызвал другую мысль. Для меня это вполне естественно, поэтому я не упоминал об этом: когда я выполняю docker-compose с рабочего стола, все работает нормально. Однако, если я выполняю его из своего обычного рабочего каталога, это не так. Мой обычный рабочий каталог — это смонтированный том с VeryCrypt в Windows. Очевидно, что в последнем случае возникают проблемы с общим доступом к каталогу.
На всякий случай, если кто-нибудь тоже столкнется с этой ошибкой в будущем.
Ответ №2:
Я хочу сделать одну из моих папок доступной для стека LAMP (мои источники, находящиеся в папке «src»). Однако исходные файлы не видны в папке /var/www/html .
Я думаю, что существует путаница в том, как монтирование работает с docker.
Когда вы указываете монтирование для контейнера docker, например :
php-httpd:
image: "php:7.3-apache"
ports:
- "80:80"
volumes:
- ./src/:/var/www/html/
php-httpd
С помощью mount будет установлен только контейнер, а не другие контейнеры вашего стека LAMP.
Если вам нужно установить это крепление для других контейнеров, сделайте это явно для них.
Интересно, что когда я меняю «./src/» на «./DocumentRoot», на моем хост-компьютере создается папка DocumentRoot. Однако при размещении файлов в DocumentRoot на хосте или в /var/www/html в docker файлы не отображаются на docker или хосте соответственно.
Именно так работает монтирование. Когда папка существует на хосте (здесь src
), docker использует ее для монтирования своего содержимого с хоста в контейнер. Когда папка не завершается на хосте, Docker создает ее.
Комментарии:
1. Привет, спасибо за ваши идеи. Ну, как правило, я хочу, чтобы php-httpd видел только мои исходники (база данных и phpmyadmin не нуждаются в них на данном этапе), поэтому я думаю, что все должно быть в порядке. Для второй части и «DocumentRoot»: Да, я это понял. Дело в том, что когда я использую «DocumentRoot», создается каталог (так что я, очевидно, нахожусь в нужном каталоге), но когда я использую свою папку «src», ее содержимое не отображается внутри docker. Если docker использует папку src, я бы ожидал увидеть свои исходники в контейнере.
2. Добро пожаловать : ) Вчера я протестировал ваш файл docker и не заметил поведения, которое вы описываете. Монтирование работает должным образом.
Ответ №3:
Я, наконец, нашел решение. Я разделяю файл docker-compose и выполняю часть php-httpd в отдельном dockerfile. Там я могу скопировать свои исходники в dockercontainer.
Это не оригинальное решение, поэтому я все равно был бы благодарен за информацию о проблеме, почему монтирование привязки не работает, но это решение работает для меня.