Docker挂载顺序乱序,不让我挂载我的目录

标签 docker docker-compose bind docker-volume rancheros

我的 docker-compose.yml 如下

version: '3.3'

services:
   db:
     image: mysql:5.7
     container_name: mysql-wordpress
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3300:3306"
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     container_name: wordpress
     depends_on:
       - db
     image: wordpress:latest
     volumes:
      - ./wp-content:/var/www/html/wp-content
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
     ports:
       - "80:80"
       - "443:443"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

   phpmyadmin:
      image: phpmyadmin/phpmyadmin
      container_name: phpmyadmin
      depends_on:
         - db
      restart: always
      ports:
         - "8080:80"
      environment:
        - PMA_ARBITRARY=1

volumes:
    db_data:

当我开始 docker-compose up -d
wp-content 目录与容器 wp-content 目录内的主机内容不同。

当我做 docker inspect WordPress :
"Mounts": [
        {
            "Type": "bind",
            "Source": "/rootfs/home/rancher/projects/tabletop/uploads.ini",
            "Destination": "/usr/local/etc/php/conf.d/uploads.ini",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/rootfs/home/rancher/projects/tabletop/wp-content",
            "Destination": "/var/www/html/wp-content",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "volume",
            "Name": "d0a4f5ad342db0db782b41dd676aa0e58a324b5e7db1e56086bca5550a9ffdc3",
            "Source": "/var/lib/docker/volumes/d0a4f5ad342db0db782b41dd676aa0e58a324b5e7db1e56086bca5550a9ffdc3/_data",
            "Destination": "/var/www/html",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }

看来第三个挂载可能已经覆盖了我的绑定(bind)挂载。但我不知道它来自哪里。我怎样才能在它之后挂载我的 wp-content?

更新:
此问题仅发生在 rancherOS 、 coreOS 和 linux Mint 上,它工作正常

最佳答案

首先,你知道你可以创建两种卷(让我们忽略这个解释 tmpfs):

  • 绑定(bind)类型卷
  • 卷型卷
  • 命名卷。
  • 未命名的卷。

  • 创建绑定(bind)类型时,它会在两个目录或文件之间建立关联。

    当您在内部创建卷类型时,它也完成了绑定(bind) /var/lib/docker/volumes//_data 和目标之间。
    可以是您给出的字符串(命名卷)或类似您的字符串:d0a4f5ad342db0db782b...(未命名卷)

    So, you've created two bind-volumes from your local directory in host ./wp-contend furthermore a bind volume for uploads.ini file. Everything is ok.



    关键是你从 image: wordpress:latest 继承了一个未命名的卷。 .

    如果你有用于生成 wordpress:latest 的 Dockerfile,你会看到如下一行:
    VOLUME [/var/www/html]
    因此,它在 /var/lib/docker/volumes/d0a4f5ad342db0db782b41dd676aa0e58a324b5e7db1e56086bca5550a9ffdc3/_data 中生成了一个未命名的卷。
    这样做是为了避免在容器退出时丢失所有生成的信息。是一种保持数据一致性的方法。
    因此,如果您最初只有一个文件 your_file.txt在您的 ./wp-content , 在 wordpress 之后开始, WordPress 创建于 wp-content如果不存在以下目录/文件:
    - 索引.php
    - 插件/
    - 主题/
    您的 ./wp-content 中应该有与 docker-compose -d up 之前相同的信息。加上这些由 wordpress 生成的文件和目录,因为您正在从 wordpress 图像中安装一个已安装卷的子文件夹中的绑定(bind)卷。

    关于Docker挂载顺序乱序,不让我挂载我的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057740/

    相关文章:

    python - 在 dockerbuild 文件中添加到 pythonpath 的路径

    docker - PHP的composer软件包管理器的容器显示消息/错误:docker-compose的 “docker_composer_1 exited with code 0”

    将 ipv6 slaac 地址绑定(bind)到 windows IP 堆栈错误 10049

    javascript - jQuery .bind() 在 1.9.1 中不更新值

    javascript - 重新定义点击选择器 jQuery

    docker - Cassandra 节点未在 Docker 中链接

    java - 如果我们在 dockerfile 中使用 CMD,Docker 多阶段构建会失败

    docker - 使用 http post 进行 active 探测

    docker - 从另一个Docker容器中运行一个命令行命令并共享文件

    wordpress - docker-compose wordpress mysql连接被拒绝