【问题标题】:Docker Volume PersistenceDocker 卷持久性
【发布时间】:2020-07-19 22:47:39
【问题描述】:

我正在努力学习 Docker。我已经在我的 Windows10 Pro 电脑上安装了 Docker Desktop。

我开始使用 Docker 建立和运行 PHP、MySQL 网站。

我的 docker-compose.yml 看起来像

version: "3.8"
services:
    www:
        build: .
        ports: 
            - "80:80"
        volumes:
            - ./www:/var/www/html            
        links:
            - db
        networks:
            - default
    db:
        image: mysql:8.0
        ports: 
            - "3306:3306"
        command: --default-authentication-plugin=mysql_native_password
        environment:
            MYSQL_DATABASE: myDb
            MYSQL_USER: user
            MYSQL_PASSWORD: test
            MYSQL_ROOT_PASSWORD: test 
        volumes:
            - ./dump:/docker-entrypoint-initdb.d
            - ./conf:/etc/mysql/conf.d
            - persistent:/var/lib/mysql
        networks:
            - default
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        links: 
            - db:db
        ports:
            - 8000:80
        environment:
            MYSQL_USER: user
            MYSQL_PASSWORD: test
            MYSQL_ROOT_PASSWORD: test 
volumes:
    persistent:

DockerFile 看起来像

FROM php:7.3-apache 
RUN docker-php-ext-install mysqli
RUN apt-get update \
    && apt-get install -y libzip-dev \
    && apt-get install -y wget \
    && apt-get install -y zlib1g-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install zip

我有一个带有 index.phpwww 文件夹。

当我跑步时

docker-compose up -d

我的 PHP、mySQL 站点启动并正常运行,我可以访问 index.php 并获得预期结果。

到目前为止一切顺利。

现在,我想更改 Dockerfile 以建立一个 php 论坛网站 (phpbb) - 所以我更新了我的 Dockerfile 如下:

FROM php:7.3-apache 
RUN docker-php-ext-install mysqli
RUN apt-get update \
    && apt-get install -y libzip-dev \
    && apt-get install -y wget \
    && apt-get install -y zlib1g-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install zip

WORKDIR /var/www/html

RUN wget https://download.phpbb.com/pub/release/3.3/3.3.0/phpBB-3.3.0.tar.bz2 \
&& tar -xvjf phpBB-3.3.0.tar.bz2
&& ls -l

当我跑步时

docker-compose build --no-cache

我可以看到预期的结果 - 即“ls”命令在 /var/www/html 中显示所有预期的 phpBB 文件

但是,当我跑步时

docker-compose up -d

我的容器只有 /var/www/html 中的 index.php(www 文件夹中的 index.php)。没有任何 phpBB 文件。

我做错了什么?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-networking docker-engine


    【解决方案1】:

    文件在那里,但您通过绑定挂载隐藏了它们。

    您将挂载 ./www 绑定到同一目录 (/var/www/html) 中,这将隐藏其内容。

    这里:

    www:
      ...
      volumes:
        - ./www:/var/www/html  
    

    当您构建映像时,您可以正确看到文件,但是一旦您运行 docker-compose,就会创建绑定挂载并隐藏这些文件。

    【讨论】:

    • 谢谢。那么我应该怎么做呢?
    • 这取决于您想要实现的目标。不要使用绑定挂载或将其挂载到另一个目录或将文件安装到其他地方。您需要根据自己的需要弄清楚您的目录结构,没有一种解决方案可以满足所有需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2021-07-13
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多