docker-compose volumes_from equivalent with version 3

DockerDocker Compose

Docker Problem Overview


I'm trying to create an Nginx/PHP FPM setup with docker compose and am having issues with the version 3 volumes syntax/changes.

My Dockerfile:

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

My 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:

When I add an index.php file into ./html, I can view that by going to http://localhost:8888, but any static files (like CSS) return a 404 because Nginx cannot find those in its container (/var/www/html is empty on the nginx container). With version 3 docker compose files do not have volumes_from anymore, which is basically what I'm trying to replicate.

How can I get this to work with version 3?

Docker Solutions


Solution 1 - Docker

For using "Named volumes" for sharing files between containers you need to define

  1. volumes: section on the top level of yml file and define volume name

    volumes: php:

  2. define volume section on first container like you did (Where share will mount)

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

  3. define volume section on second container (Share will mount from)

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

  4. (optionally) If you need to store volume data on the host machine you can use local-persist docker plugin. You can specify docker volume driver and path where you data will be stored.

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

In your case you forgot define volume name for php container. Just replace

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

to

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

and use Local Persist Docker Plugin

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRobView Question on Stackoverflow
Solution 1 - DockerBukharov SergeyView Answer on Stackoverflow