One Container To Control Them All
In most circumstances isolation between containers is a good thing allowing you to expose only the services you need.
There maybe times you want to do something like running docker in docker which has it’s own problems. However you can probably achieve what you want to do by connecting to docker on the host from inside a container letting you run commands inside other containers or start/stopping sibling containers etc.
Warning, think hard before doing this as it allows anyone with access to run commands inside the container to access other containers on the host.
How to do it
Map the docker socket from the host to the container, an example snippet taken from a docker-compose file below:
services: webapptest: build: . expose: - "5000" volumes: - /var/run/docker.sock:/var/run/docker.sock
Example running commands on the app container to access docker on the host.
// download docker-compose to the container and make it executable docker exec test_webapptest_1 curl -L https://github.com/docker/compose/releases/download/1.16.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose docker exec test_webapptest_1 chmod +x /usr/local/bin/docker-compose // executing commands inside test_webapptest_1 that will connect to docker on the host using docker-compose docker exec test_webapptest_1 docker-compose kill test_sibling_container_1 docker exec test_webapptest_1 docker-compose up -d database_container