Порядок монтирования Docker из последовательности и запрет на монтирование моего каталога - PullRequest
0 голосов
/ 27 июня 2018

Мой 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 Ответ

0 голосов
/ 27 июня 2018

Прежде всего, вы знаете, что можете создавать два вида томов (давайте проигнорируем это объяснение tmpfs):

  • том связного типа
  • том типа тома
    • именованных томов.
    • безымянные тома.

Когда вы создаете тип привязки, выполняется связь между двумя каталогами или файлами.

Когда вы создаете тип тома внутри, это также делает привязку между / var / lib / docker / volume // _ данными и местом назначения. может быть заданной вами строкой (именованный том) или строкой, подобной вашей: d0a4f5ad342db0db782b ... (безымянный том)

Итак, вы создали два тома bind из локального каталога на хосте ./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.

...