I have a docker-compose.yml
which looks like
version: '2'
services:
redis:
image: redis
mysqldb:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=passme
- MYSQL_DATABASE=mydb
- MYSQL_USER=root
base:
build: .
volumes:
- .:/proj
environment:
- ENV_1=Value_1
- ENV_2=Value_2
- ENV_3=Value_3
worker:
extends:
service: base
command: celery -A proj worker --loglevel=debug
links:
- redis
- mysqldb
depends_on:
- mysqldb
web:
extends:
service: base
links:
- mysqldb
- redis
depends_on:
- mysqldb
ports:
- "8000:8000"
command: python manage.py runserver 0.0.0.0:8000
Now, I want to upgrade it to version-3.
From the doc
The
extends
keyword is supported in earlier Compose file formats up to Compose fileversion 2.1
(see extends in v1 and extends in v2), but is not supported in Composeversion 3.x
So, here is my question, How can I use Version-3 docker-compose file without losing my current functionalities?
With docker-compose 1.27, extends
is supported again for version 3:
https://github.com/docker/compose/pull/7588
Extending services isn't supported in version 3 after removal of extends
.
As for workaround, you can use docker-compose addons
, e.g.
include:
- http://example.com/compositions/servicea.yaml
- http://example.com/compositions/serviceb.yaml
namespace: core
web:
image: example/service_a:latest
links: ['servicea.web', 'serviceb.api']
Another way is to include multiple composer files from the command-line (with multiple -f
options). See: Add support for multiple composefile when deploying. E.g.
docker-compose -f submodules/A_SUB_PROJECT/docker-compose.yml -f submodules/B_SUB_PROJECT/docker-compose.yml config | docker-compose -f - up
Source: When using multiple docker-compose.yml files from different directories, local paths are not followed correctly.
In general, version 3 is more ideal for Swarm/Kube stacks, so consider using it.
E.g.
docker stack deploy -c docker-compose.yml mystack1
docker stack deploy -c another/docker-compose.yml mystack2
If you're not using Swarm or Docker Enterprise Kubernetes stacks, there is no reason to use v3. Stick with v2.4, and you get all the
docker-compose
cli features includingextends
,depends_on
, extension fields, and evendepends_on
with healthchecks (to avoidwait-for-it
scripts).
Related:
extends
feature in Compose v3 / docker stack deployIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With