# TL;dr k8s有Downward API可以将Pod和Container字段呈现给运行中的容器。那么docker呢? 答案是:使用docker API 使用 -v /var/run/docker.sock:/var/run/docker.sock 映入容器,或者,enabled the docker remote API (via -H tcp://0.0.0.0:4243 for instance) ```bash docker run -it --rm --name tmpnginx -p80 -v /var/run/docker.sock:/var/run/docker.sock nginx:1.16.1 bash ``` ```bash docker exec -it tmpnginx bash # 获取容器id containerID=$(awk -F/ '/docker/{print $NF;exit;}' /proc/self/cgroup) # echo $containerID # 获取容器名字 containerName=`curl -s --unix-socket /var/run/docker.sock http:/v1.40/containers/${containerID}/json | jq -r '.Name'` imageName=`curl -s --unix-socket /var/run/docker.sock http:/v1.40/containers/${containerID}/json | jq -r '.Config.Image'` # | jq -r '.NetworkSettings.Ports["80/tcp"][0].HostPort' # | jq -r '.Config.Image' # | jq -r '.Name' # | jq -r '.Id' curl --silent -XGET -G --data-urlencode "filters={\"status\":[\"exited\"]}" --unix-socket /var/run/docker.sock http:/v1.40/containers/json |jq ``` # ref * [Develop with Docker Engine API | Docker Documentation](https://docs.docker.com/engine/api/) * [how to get container name from inside? docker.io - Stack Overflow](https://stackoverflow.com/questions/26979038/how-to-get-container-name-from-inside-docker-io) * [How to get the IP address of the docker host from inside a docker container - Stack Overflow](https://stackoverflow.com/questions/22944631/how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container) * [docker - How to get container ID from within the container itself - Stack Overflow](https://stackoverflow.com/questions/48181400/how-to-get-container-id-from-within-the-container-itself) * [Easy scraping with httpie and jq](https://willschenk.com/articles/2019/easy_scraping_with_httpie_and_jq/)