docker-compose и проблема с постоянным хранилищем

Я новичок в docker и docker-compose, и у меня проблема с постоянным хранилищем. У меня есть три папки, в которых мне нужно хранить файлы вне докера. Я не знаю, что я делаю неправильно.

docker-compose.yaml

version: '3.3'

services:
    webserver:
        build:
              context: ./
              dockerfile: webserver.DockerFile
        ports:
            - 80:80
            - 443:443
        volumes:
            - html:/var/www/html
            - platforms:/var/www/platforms
            - sites-available:/etc/apache2/sites-available
    mysql-server:
        image: mysql:8.0.20
        restart: always
        environment:
              MYSQL_ROOT_PASSWORD: somepassword555

    phpmyadmin:
        image: phpmyadmin/phpmyadmin:5.0.1
        restart: always
        environment:
                PMA_HOST: mysql-server
                PMA_USER: root
                PMA_PASSWORD: somepassword555
        ports:
                - "8080:80"

Когда я запускаю сборку на этом, я получаю пустые папки на веб-сервере. Папки на хосте не пусты.

EDIT: уточнить

на HOST есть:

webserver.DockerFile
docker-compose.yml
- html
--- index.php
--- ...
- platforms
--- dir1
--- dir2
--- dir3
--- ...
- sites-available
--- backend.conf
--- frontend.conf

внутри webserver.Dockerfile есть:

RUN mkdir -p /var/www/html/backend
RUN mkdir -p /var/www/html/frontend
RUN a2ensite backend.conf frontend.conf

который не создает каталоги «backend» и «frontend» на HOST, а затем терпит неудачу на a2ensite с ошибкой:

ERROR: Site backend does not exist!
ERROR: Site frontend does not exist!
ERROR: Service 'webserver' failed to build: The command '/bin/sh -c a2ensite backend.conf frontend.conf' returned a non-zero code: 1

Все это указало мне на то, что каталоги в DOCKER, которые я хотел связать/смонтировать с помощью HOST, на самом деле пусты:

/var/www/html
/var/www/platforms
/etc/apache2/sites-available

но каталоги на HOST не пусты.


person user2444098    schedule 29.09.2020    source источник
comment
I get empty folders in webserver какие каталоги? Как это проверить? Folders on host are not empty. Какие каталоги пусты? Как ты это проверил? Пожалуйста, будьте более конкретными. Создайте минимально воспроизводимый пример. volumes: - html html не ./html - один создает именованный том, другой связывает каталог. Пожалуйста, изучите ссылку для docker-compose. Работает ли соединение между именованным томом и каталогом внутри контейнера докеров?   -  person KamilCuk    schedule 29.09.2020
comment
Комментарий выше правильный. Вы можете сделать docker volume ls, чтобы увидеть именованные тома.   -  person Peaceful James    schedule 29.09.2020
comment
@PatrickArtner Я внес это изменение, но поведение осталось прежним. тома: - /srv/docker/project/sites-available:/etc/apache2/sites-available - /srv/docker/project/html:/var/www/html - /srv/docker/project/platforms:/var /www/платформы   -  person user2444098    schedule 30.09.2020


Ответы (1)


Помните, что папка слева от двойных точек связана с контейнером :/var/www/html . Поэтому, если контейнер не проверяется при запуске, если папка заполнена, она будет перезаписана и снова пуста. Вы можете написать Entrypoint Script, который поможет вам в этом.

person Gregor Wedlich    schedule 30.09.2020