What is the difference between docker-compose up and docker-compose start?
DockerDocker ComposeDocker Problem Overview
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 Solutions
Solution 1 - Docker
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 running docker-compose logs -f
). When the command exits,
> all containers are stopped. Running docker-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/
Solution 2 - Docker
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
. Use up
to start or restart
> all the services defined in a docker-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. Use run
> to run tests or perform an administrative task such as removing or
> adding data to a data volume container. The run
command acts like
> docker 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.