Порядок монтирования Docker из последовательности и запрет на монтирование моего каталога
Мой 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": ""
}
Кажется, третье крепление могло перекрыть моё крепление. Но я не знаю, откуда это. Как я могу установить свое wp-содержимое после него?
Обновление: эта проблема возникает только на RancherOS, на CoreOS и Linux Mint работает нормально
1 ответ
Прежде всего, вы знаете, что вы можете создать два вида томов (давайте проигнорируем это объяснение tmpfs):
- объем связывания
- том типа том
- названные тома.
- безымянные тома.
Когда вы создаете тип связывания, это делает связь между двумя каталогами или файлами.
Когда вы создаете тип тома внутри, это также делает привязку между /var/lib/docker/volume //_data и destination. может быть заданной вами строкой (именованный том) или строкой, подобной вашей: d0a4f5ad342db0db782b... (безымянный том)
Итак, вы создали два тома связывания из локального каталога на хосте./wp-contend, а также том связывания для файла uploads.ini. Все отлично.
Дело в том, что вы унаследовали безымянный том от image: wordpress:latest
,
Если бы у вас был Dockerfile, который использовался для генерации wordpress: latest, вы бы увидели строку вроде:
VOLUME [/var/www/html]
Таким образом, он генерирует безымянный том в /var/lib/docker/volumes/d0a4f5ad342db0db782b41dd676aa0e58a324b5e7db1e56086bca5550a9ffdc3/_data
Это сделано, чтобы избежать потери всей сгенерированной информации при выходе из контейнера. Это способ сохранить согласованность данных. Итак, если изначально у вас был один файл your_file.txt
в вашем ./wp-content
, после wordpress
начинается, WordPress создает в wp-content
следующие каталоги / файлы, если они не существуют: - index.php - плагины / - темы / В вашем./wp-content должна быть та же информация, что и раньше docker-compose -d up
плюс эти сгенерированные по wordpress файлы и каталоги, потому что вы монтируете том связывания в подпапке поверх уже смонтированного тома из образа wordpress.