Reputation: 19114
I have a docker-compose.yml
which contain several containers. Three of them are for my app (client, server and database) and the rest are for various dev tools (e.g. psql, npm, manage.py, etc). When I do docker-compose up
all of them are started, but I only want the three main ones to start. Because of the links I've specified, I can start just those three with docker-compose up client
but then the output is only from that one container. So, is there a way to do one of the following:
docker-compose up
docker-compose up client
Upvotes: 533
Views: 547096
Reputation: 313
You can use docker compose up --build ${service-name} -d
. Where the flag -d is for running in detached mode.
Upvotes: 7
Reputation: 187
If you have multiple compose
files, you should at first add them after at remember each services from compose files that you wanna up. look at below:
docker-compose -f $(COMPOSE_FILES) -f $(ARM_64_COMPOSE_FILES) up -d app mysql_db_arm64
Upvotes: 1
Reputation: 8923
Starting with docker-compose
1.28.0 the new service profiles are just made for that! With profiles
you can mark services to be only started in specific profiles:
services:
client:
# ...
db:
# ...
npm:
profiles: ["cli-only"]
# ...
docker-compose up # start main services, no npm
docker-compose run --rm npm # run npm service
docker-compose --profile cli-only up # start main and all "cli-only" services
Since docker-compose
v1.5 it is possible to pass multiple docker-compose.yml
files with the -f
flag. This allows you to split your dev tools into a separate docker-compose.yml
which you then only include on-demand:
# start and attach to all your essential services
docker-compose up
# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update
# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update
For an in-depth discussion on this see docker/compose#1896.
Upvotes: 146
Reputation: 3111
To start a particular service defined in your docker-compose file. for example if your have a docker-compose.yml
docker-compose start db
given a compose file like as:
version: '3.3'
services:
db:
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: yourPassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: yourPassword
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
volumes:
- ./l3html:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: yourPassword
volumes:
db_data:
l3html:
Some times you want to start mySQL only (sometimes you just want to populate a database) before you start your entire suite.
Upvotes: 172
Reputation: 522
You can use the run command and specify your services to run. Be careful, the run command does not expose ports to the host. You should use the flag --service-ports
to do that if needed.
docker-compose run --service-ports client server database
Upvotes: 1
Reputation: 126
I actually had a very similar challenge on my current project. That broght me to the idea of writing a small script which I called docker-compose-profile (or short: dcp). I published this today on GitLab as docker-compose-profile.
So in short: I now can start several predefined docker-compose profiles using a command like dcp -p some-services "up -d"
. Feel free to try it out and give some feedback or suggestions for further improvements.
Upvotes: 3
Reputation: 507
One good solution is to run only desired services like this:
docker-compose up --build $(<services.txt)
and services.txt file look like this:
services1 services2, etc
of course if dependancy (depends_on), need to run related services together.
--build is optional, just for example.
Upvotes: 18
Reputation: 17900
You usually don't want to do this. With Docker Compose you define services that compose your app. npm
and manage.py
are just management commands. You don't need a container for them. If you need to, say create your database tables with manage.py
, all you have to do is:
docker-compose run client python manage.py create_db
Think of it as the one-off dynos Heroku uses.
If you really need to treat these management commands as separate containers (and also use Docker Compose for these), you could create a separate .yml
file and start Docker Compose with the following command:
docker-compose up -f my_custom_docker_compose.yml
Upvotes: -2
Reputation: 10305
You can start containers by using:
$ docker-compose up -d client
This will run containers in the background and output will be avaiable from
$ docker-compose logs
and it will consist of all your started containers
Upvotes: 698