Dockerfile VOLUME не отображается на хосте - PullRequest
0 голосов
/ 16 декабря 2018

В файле Docker WordPress есть оператор VOLUME /var/www/html.Если я правильно понимаю, это означает, что файлы WordPress (в / var / www / html) должны быть сопоставлены с каталогом на моем хосте, содержащим docker-compose.yml, НО это не происходит.Знаете ли вы, почему?

Я создал свой собственный Dockerfile WordPress, который расширяет исходный Dockerfile WordPress, где вы найдете указанный оператор VOLUME /var/www/html в строке 44 (https://github.com/docker-library/wordpress/blob/b3739870faafe1886544ddda7d2f2a88882eeb31/php7.2/apache/Dockerfile).

Я даже пыталсядобавьте оператор VOLUME /var/www/html внизу моего Dockerfile, как вы можете видеть в моем Dockerfile ниже. Я добавил его на всякий случай, но я не думаю, что там что-то идет не так.

FROM wordpress:4.9.8-php7.2-apache

##########
# XDebug #
##########
# Install
RUN pecl install xdebug-2.6.1; \
    docker-php-ext-enable xdebug
# Configure
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_host=docker.for.win.localhost" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
    #RUN echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ##

###########
# PHPUnit #
###########
RUN apt-get update; \
    apt-get install wget

RUN wget https://phar.phpunit.de/phpunit-7.4.phar; \
    chmod +x phpunit-7.4.phar; \
    mv phpunit-7.4.phar /usr/local/bin/phpunit

RUN phpunit --version

###################
# PHP Codesniffer #
###################
RUN curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar; \
    mv phpcs.phar /usr/local/bin/phpcs; \
    chmod +x /usr/local/bin/phpcs

############
# Composer #
############
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"; \
    php -r "if (hash_file('sha384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"; \
    php composer-setup.php; \
    php -r "unlink('composer-setup.php');"; \
    mv composer.phar /usr/local/bin/composer

##################
# Install Nodejs #
##################
RUN apt-get install -y gnupg2; \
    curl -sL https://deb.nodesource.com/setup_11.x | bash -; \
    apt-get install -y nodejs

##################
# Install Grunt  #
##################
RUN npm install -g grunt-cli

#####################
# BASH customization#
#####################
RUN echo "alias ll='ls --color=auto -lA'" >> ~/.bashrc

VOLUME /var/www/html

docker-compose.yml

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./docker-mysql/db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: progonkpa/wordpress:1.0
     restart: always
     ports:
       - "80:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     restart: always


volumes:
    db_data:

1 Ответ

0 голосов
/ 16 декабря 2018

Том создается, он просто не создается в контексте выполнения, в котором находится файл docker-compose.yml. Я предполагаю, что вы запускаете команду ls -lah и ожидаете, что что-то будет создано в каталоге, где находится ваш файл docker-compose.yml.Вот почему вы говорите: «НО этого не происходит»

Команда VOLUME в Dockerfile ограничена.Хост неизвестен, когда вы создаете образ из Dockerfile.До тех пор, пока docker run не будет выполнен с использованием вашего встроенного образа, хост Docker известен.

Итак, при использовании команды VOLUME в Dockerfile и последующем использовании docker run с этим образом том создается в месте, настроенном установкой Docker.Чтобы подтвердить, что том действительно был создан для вашего контейнера, используйте эту команду:

docker inspect -f '{{.Mounts}}' [container_name]

Чтобы лучше контролировать и указать гдеваш VOLUME создается на вашем хосте Docker, вам нужно использовать опцию -v с docker run или настроить в файле docker-compose.yml, как это делается для вашего постоянного контейнера MySQL.

Youможете удалить VOLUME /var/www/html из вашего Dockerfile, и вам следует.Потому что ваше FROM wordpress изображение создает ОБЪЕМ, как вы уже знаете.

...