我的 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) /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/