Подтвердить что ты не робот

Docker-compose volume_from эквивалент версии 3

Я пытаюсь создать настройку FPM Nginx/PHP с компоновкой докеров и у меня возникают проблемы с синтаксисом/изменениями томов версии 3.

Мой Dockerfile:

FROM php:7-fpm
VOLUME /var/www/html

Мой docker-compose.yml:

version: "3"
services:
  php:
    build: .
    volumes:
      - ./html:/var/www/html
  web:
    image: nginx
    links:
      - php
    ports:
      - "8888:80"
    volumes:
      - php:/var/www/html
      - ./default.conf:/etc/nginx/conf.d/default.conf
volumes:
  php:

Когда я добавляю файл index.php в ./html, я могу это увидеть, перейдя в http://localhost:8888, но любые статические файлы (например, CSS) возвращает 404, потому что Nginx не может найти их в своем контейнере (/var/www/html пуст в контейнере nginx). С версией docker для версии 3 больше нет volumes_from, что в основном является тем, что я пытаюсь реплицировать.

Как я могу заставить это работать с версией 3?

4b9b3361

Ответ 1

Для использования "Именованных томов" для обмена файлами между контейнерами вам необходимо определить

1) volumes: на верхнем уровне файла yml и определить имя тома

volumes:
  php:

2) определите раздел volume в первом контейнере, как вы это делали (где будет монтировать share)

web:
    volumes:
      - php:/var/www/html #<container_name>:<mount_point>

3) определите раздел volume на втором контейнере (из которого будет подключаться Share)

php:
  volumes:
    - php:/var/www/html

4) (необязательно) Если вам нужно сохранить данные тома на главном компьютере, вы можете использовать local-persist плагин докеров. Вы можете указать драйвер тонера и путь, где будут храниться данные.

volumes:
  php:
    driver: local-persist
    driver_opts:
      mountpoint: /path/on/host/machine/

В вашем случае вы забыли определение имени тома для контейнера php. Просто замените

  php:
    build: .
    volumes:
      - ./html:/var/www/html

к

  php:
    build: .
    volumes:
      - php:/var/www/html

и используйте плагин Local Persist Docker