docker-compose volumes_from equivalent with version 3
DockerDocker ComposeDocker 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
-
volumes:
section on the top level of yml file and define volume namevolumes: php:
-
define
volume
section on first container like you did (Where share will mount)web: volumes: - php:/var/www/html #
: -
define
volume
section on second container (Share will mount from)php: volumes: - php:/var/www/html
-
(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