代码之家  ›  专栏  ›  技术社区  ›  progonkpa

主机上的Dockerfile卷不可见

  •  0
  • progonkpa  · 技术社区  · 6 年前

    在WordPress Dockerfile中,有一个 VOLUME /var/www/html 语句。如果我理解正确,这意味着wordpress文件(in/var/www/html)应该映射到我的主机上包含docker-compose.yml的目录,但这并没有发生。你知道为什么吗?

    我创建了自己的wordpress dockerfile,扩展了原来的wordpress dockerfile,在这里你会发现said 卷/var/www/html 第44行的声明( https://github.com/docker-library/wordpress/blob/b3739870faafe1886544ddda7d2f2a88882eeb31/php7.2/apache/Dockerfile )

    我甚至尝试添加 卷/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 回复  |  直到 6 年前
        1
  •  1
  •   Brian Ogden    6 年前

    正在创建卷,但它不是在docker-compose.yml文件所在的执行上下文中创建的。 我想你在经营 ls -lah 命令,并希望在docker-compose.yml文件所在的目录中创建一些内容。这就是为什么你说,“但这不是发生的”

    dockerfile中的volume命令受到限制。从Dockerfile构建图像时主机未知。直到 docker run 使用Docker主机已知的构建映像执行。

    因此,在Dockerfile中使用volume命令,然后使用 码头工人 使用该映像,卷将在Docker安装配置的位置创建。要确认确实为容器创建了卷,请使用以下命令:

    docker inspect-f'.mounts'[容器名称]

    要更好地控制和指定在Docker主机上创建卷的位置,需要使用 -v 选项与 码头工人 或者在docker-compose.yml文件中进行配置,就像在mysql持久性容器中一样。

    你可以移除 VOLUME /var/www/html 从你的码头文件,你应该。因为你 FROM wordpress image创建卷,如您所知。