I would like to make my docker containers
aware of their configuration, the same way you can get information about EC2 instances through metadata.
I can use (provided docker
is listening on port 4243
)
curl http://172.17.42.1:4243/containers/$HOSTNAME/json
to get some of its data, but would like to know if there is a better way at least the get the full ID of the container, because HOSTNAME
is actually shortened to 12 characters and docker seems to perform a "best match" on it.
Also, how can I get the external IP of the docker host (other than accessing the EC2 metadata, which is specific to AWS)
Docker sets the hostname to the container ID by default, but users can override this with
--hostname
. Instead, inspect/proc
:Here's a handy one-liner to extract the container ID:
A comment by madeddie looks most elegant to me:
I've found out that the container id can be found in /proc/self/cgroup
So you can get the id with :
WARNING: You should understand the security risks of this method before you consider it. John's summary of the risk:
Inside the container, the dockerId is your hostname. So, you could:
--volume /var/run/docker.sock:/var/run/docker.sock --privileged
docker inspect $(hostname)
inside the containerAvoid this. Only do it if you understand the risks and have a clear mitigation for the risks.
Short way: