问题
Is there a way to define a Docker Compose service such that it is only brought up when you explicitly request it?
That is to say:
docker-compose up
would not start it, but
docker-compose up optional_service
would.
回答1:
One way to achieve that is to define your optional service in a different compose file. Then to start the optional service, run:
$ docker-compose -f docker-compose.yml -f optional-service.yaml up
For example, if I have a docker-compose.yml file that looks like:
version: '2.1'
services:
lb:
image: nginx:1.13
db:
image: redis:3.2.9
I can extend it with an optional-service.yml that looks like:
version: '2.1'
services:
busy:
image: busybox
Notice that both compose files must use the same Compose file version.
You can read more about it in the Compose documentation.
回答2:
The extend keyword has been removed in version 3.x.
I faced the same issue and this is what I did:
- From Docker's official docs, we can use a COMPOSE_FILE environment variable in a
.envfile. - The way this works is: when you do
docker-compose up, instead of readingdocker-compose.yml, it will read all the compose files specified inCOMPOSE_FILEvariable.
For example,
COMPOSE_FILE=docker-compose.yml:./optional/docker-compose.prod.yml
- the good part is that:
- the
.envfile is auto-read (if located in the same level asdocker-compose.yml), when we invokedocker-compose up. - no need to specify each file with a
-fflag in CLI.
- the
- The one drawback is: need to create separate compose files for each service you wish to make optional.
Note: separate file names with a
:in case of linux or;in case of windows.
来源:https://stackoverflow.com/questions/45680958/can-you-define-optional-docker-compose-services