Docker - содержимое внутри контейнера исчезает при использовании тома - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь создать тестовый контейнер Laravel (в котором я сделаю некоторые большие изменения в системе; но это не связано с проблемой). Как видите, я загружаю содержимое Laravel внутри каталога. Если я запускаю этот контейнер через docker run, я могу получить доступ ко всем файлам.

Однако, если я запускаю тот же контейнер через файл docker-compose.yml, каталог laravel\blog создается в хост-системе, но содержимое исчезает из контейнера (если я выполнил c - в нем ничего не осталось).

Я не знаю, что я делаю неправильно, так как все выглядит корректно. В общем, я хотел бы добиться того же поведения, что и контейнер database. Я хочу, чтобы содержимое контейнера синхронизировалось с выбранной папкой хоста. Та же проблема возникает и при удалении службы web; Я думал, что точка двойного объема может вызвать удаление в контейнере.

Заранее большое спасибо!

Dockerfile:

FROM php:7.3-fpm

# Installing dependencies
RUN apt-get update && apt-get install -y \
    libzip-dev \
    git \
    mariadb-client \
    zip \
    unzip \
    nano \
    curl \
    git \
    libmagickwand-dev --no-install-recommends \
    && pecl install imagick


# Docker extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
RUN docker-php-ext-enable imagick


# Installing composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php \
    && php -r "unlink('composer-setup.php');" \
    && mv composer.phar /usr/local/bin/composer


# Installing node.js & npm
RUN curl -sL https://deb.nodesource.com/setup_13.x | bash - \
    && apt-get install -y nodejs


# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*


# Laravel installer
RUN composer global require laravel/installer


ENV DOCKER_LARAVEL_PROJECT_NAME blog
# init project
WORKDIR /laravel
RUN composer create-project --prefer-dist laravel/laravel $DOCKER_LARAVEL_PROJECT_NAME

WORKDIR /laravel/$DOCKER_LARAVEL_PROJECT_NAME
VOLUME /laravel/$DOCKER_LARAVEL_PROJECT_NAME

docker - составить. yml

version: "3.7"

services:

  app:
    image: laratest
    volumes:
      - ./../laravel:/laravel/blog
    environment:
      - DB_HOST=database
    depends_on:
      - database

  web:
    image: nginx:latest
    working_dir: /var/www
    volumes:
      - ./../laravel:/var/www
      - ./vhost.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - app

  database:
    image: mysql:5.7
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE=database"
      - "MYSQL_USER=root"
      - "MYSQL_PASSWORD=password"
      - "MYSQL_ROOT_PASSWORD=password"
    ports:
      - "33061:3306"

1 Ответ

0 голосов
/ 20 января 2020

вы монтируете папку хоста в контейнер, папка хоста пуста, поэтому папка в контейнере будет пустой, то, что вы хотите, может быть, это привязка:

version: "3.7"

services:

  app:
    image: laratest
    volumes:
      - laravel-blog-data:/laravel/blog
    environment:
      - DB_HOST=database
    depends_on:
      - database

  web:
    image: nginx:latest
    working_dir: /var/www
    volumes:
      - laravel-blog-data:/var/www
      - ./vhost.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - app

  database:
    image: mysql:5.7
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE=database"
      - "MYSQL_USER=root"
      - "MYSQL_PASSWORD=password"
      - "MYSQL_ROOT_PASSWORD=password"
    ports:
      - "33061:3306"

volumes:
  laravel-blog-data:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/var/local/laravel/blog'
...