Docker Commands
The Docker provider exposes some additional Vagrant commands that are useful for interacting with Docker containers. This helps with your workflow on top of Vagrant so that you have full access to Docker underneath.
docker-exec
vagrant docker-exec
can be used to run one-off commands against
a Docker container that is currently running. If the container is not running,
an error will be returned.
The above would run rake db:migrate
in the context of an app
container.
Note that the "name" corresponds to the name of the VM, not the name of the Docker container. Consider the following Vagrantfile:
This Vagrantfile will start the official Docker Consul image. However, the
associated Vagrant command to docker-exec
into this instance is:
In particular, the command is actually:
Because "default" is the default name of the first defined VM. In a multi-machine Vagrant setup as shown below, the "name" attribute corresponds to the name of the VM, not the name of the container:
The following command is invalid:
This is because the "name" of the VM is "web", so the command is actually:
For this reason, it is recommended that you name the VM the same as the container. In the above example, it is unambiguous that the command to enter the Consul container is:
docker-logs
vagrant docker-logs
can be used to see the logs of a running container.
Because most Docker containers are single-process, this is used to see
the logs of that one process. Additionally, the logs can be tailed.
docker-run
vagrant docker-run
can be used to run one-off commands against
a Docker container. The one-off Docker container that is started shares
all the volumes, links, etc. of the original Docker container. An
example is shown below:
The above would run rake db:migrate
in the context of an app
container.