Docker. Не прокидываются volumes с хост машины в контейнер

Рейтинг: 2Ответов: 1Опубликовано: 23.05.2023

Проблема возникает на ubuntu с docker desktop. Повторял на wsl, там все в порядке. Так же устанавливал отдельно docker compose и docker engine (то есть без docker desktop) и так оно тоже корректно работало. При создании контейнера в нём нет всех директорий проекта.

Это структура моего проекта:

Структура проекта

При создании оказывается только docker/ и tmp. И в тоже время в директории docker нет директории nginx.

version: "3"

services:
    app:
        build:
            context: .
            dockerfile: "docker/${APP_ENV}/app/Dockerfile"
        volumes:
            - .:/var/www
        depends_on:
            - db

    nginx:
        image: nginx
        ports:
            - "8000:80"
        volumes:
            - ./docker/${APP_ENV}/nginx/:/etc/nginx/conf.d
            - ./:/var/www
        depends_on:
            - app

    adminer:
        image: adminer
        restart: always
        ports:
            - "8070:8080"
        container_name: adminer

    db:
        image: postgres
        restart: always
        volumes:
            - ./tmp/db:/var/lib/pgsql
        environment:
            POSTGRES_DB: '${DB_DATABASE}'
            POSTGRES_PASSWORD: '${DB_PASSWORD}'
            POSTGRES_USER: '${DB_USERNAME}'
        ports:
            - "8030:5432"
        container_name: pgsql

networks:
    network:
        driver: bridge

Это мой Dockerfile:

# Используем официальный образ PHP 8.0 и добавляем расширения для работы с Laravel
FROM php:8.1-fpm

RUN apt-get update && \
    apt-get install -y \
    apt-utils \
    libpq-dev \
    libpng-dev \
    libzip-dev \
    zip unzip \
    libpq-dev \
    && docker-php-ext-install pdo pdo_pgsql && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Устанавливаем Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Копируем исходный код проекта в контейнер
COPY . /var/www

# Устанавливаем зависимости
WORKDIR /var/www
# RUN composer install --no-interaction --prefer-dist --optimize-autoloader

RUN chown -R www-data:www-data storage/ bootstrap/cache
RUN chmod -R 775 storage bootstrap/cache

# Определяем точку входа для запуска приложения
# CMD ["php", "artisan", "key", "generate"]

# ENTRYPOINT [ "docker/dev/docker-entrypoint.sh" ]

Ответы

▲ 1Принят

Данная проблема решается очень просто, вам лишь стоит добавить нужные папки во вкладе Settings/Resources/File sharing.

вкладка Settings/Resources/File sharing

Вот что пишется в документации:
Shared folders are designed to allow application code to be edited on the host while being executed in containers. For non-code items such as cache directories or databases, the performance will be much better if they are stored in the Linux VM, using a data volume (named volume) or data container.

Подробнее можно прочитать в той же документации