What is the difference between docker-compose up and docker-compose start?
Whenever I execute
docker-compose start
docker-compose ps
I see my containers with the state "UP". If I do
docker-compose up -d
I will see more verbose but it will have the same state. Is there any difference between both commands?
docker-compose start
(https://docs.docker.com/compose/reference/start/)
Starts existing containers for a service.
docker-compose up
(https://docs.docker.com/compose/reference/up/)
Builds, (re)creates, starts, and attaches to containers for a service.
Unless they are already running, this command also starts any linked services.
The
docker-compose up
command aggregates the output of each container (essentially runningdocker-compose logs -f
). When the command exits, all containers are stopped. Runningdocker-compose up -d
starts the containers in the background and leaves them running.If there are existing containers for a service, and the service’s configuration or image was changed after the container’s creation,
docker-compose up
picks up the changes by stopping and recreating the containers (preserving mounted volumes). To prevent Compose from picking up changes, use the--no-recreate
flag.
For the complete CLI reference:
https://docs.docker.com/compose/reference/
In docker Frequently asked questions this is explained very clearly:
What’s the difference between up, run, and start?
Typically, you want
docker-compose up
. Useup
to start or restart all the services defined in adocker-compose.yml
. In the default “attached” mode, you see all the logs from all the containers. In “detached” mode (-d
), Compose exits after starting the containers, but the containers continue to run in the background.The
docker-compose run
command is for running “one-off” or “adhoc” tasks. It requires the service name you want to run and only starts containers for services that the running service depends on. Userun
to run tests or perform an administrative task such as removing or adding data to a data volume container. Therun
command acts likedocker run -ti
in that it opens an interactive terminal to the container and returns an exit status matching the exit status of the process in the container.The
docker-compose start
command is useful only to restart containers that were previously created, but were stopped. It never creates new containers.