How to get IP address of running docker container

I am using Docker for Mac. I am running a nodejs based microservice in a Docker container. I want to test node microservice through the browser. How to get IP address of running docker container?

289299 次浏览

如果不想将端口从主机映射到容器,可以直接访问容器的 docker range ip。默认情况下,此范围只能从您的主机访问。你可以这样检查你的集装箱网络数据:

docker inspect <containerNameOrId>

或许最好过滤一下:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

通常,默认的 Docker ip 范围是 172.17.0.0/16。如果一切正常,并且没有指定任何特殊的网络选项,那么主机应该是 172.17.0.1,第一个容器应该是 172.17.0.2

剪辑 使用 docker 特性而不是“ bash 欺骗”的另一种更优雅的方式:

docker inspect -f "\{\{ .NetworkSettings.IPAddress }}" <containerNameOrId>

编辑2 对于现代码头引擎,现在是这样的(感谢评论!) :

docker inspect -f '\{\{range .NetworkSettings.Networks}}\{\{.IPAddress}}\{\{end}}' <containerNameOrId>

您可以使用标志 -P启动容器。这个“分配”一个随机端口到您的图像的暴露端口。

使用 docker port <container id>可以看到随机选择的端口。然后可以通过 localhost:port进行访问。

如果您想在容器中获得它,可以尝试

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17

使用 --format选项只获取 IP 地址,而不是整个容器信息:

sudo docker inspect --format '\{\{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

对于我的情况,以下工作 在麦克身上:

我无法直接在 Mac 上访问容器 IP。我需要使用 localhost与端口转发,例如,如果端口是8000,然后 http://localhost:8000

参见 https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds

最初的答案来自: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949

You can not access the docker's IP from outside of that host machine. 如果您的浏览器在另一台机器上,最好通过传递 -p 8080:8080来运行命令将主机端口映射到容器端口。

通过 -p,您可以将主机港口映射到集装箱港口,并设置一个代理将所述主机港口的所有流量转发到指定的集装箱港口。

对于现代码头引擎,请使用以下命令:

docker inspect -f '\{\{range .NetworkSettings.Networks}}\{\{.IPAddress}}\{\{end}}' container_name_or_id

老式发动机使用:

docker inspect --format '\{\{ .NetworkSettings.IPAddress }}' container_name_or_id

这将列出所有容器的 IP 地址

while read ctr;do
sudo docker inspect --format "$ctr "'\{\{.Name}}\{\{ .NetworkSettings.IPAddress }}' $ctr
done < <(docker ps -a --filter status=running --format '\{\{.ID}}')

If you want to view the IP address from within the running container, /etc/hosts file is a great place to look at. Now, to uniquely identify the entry within the hosts file, it is a good practise to run the container with the -h option. Sample commands are given below:

  1. 运行设置为 -h的容器:

docker run -td -h guju <image name>

  1. Log in to the running container and view the /etc/hosts file. It will show an entry like this:

172.17.0.5 guju