获取docker容器的ip地址

时间:2014-06-01 07:40:00

标签: docker boot2docker

我有一台ubuntu机器,它是一台我在其中安装了docker的VM。我从我的本地Windows机器上使用这台机器并做ssh,打开终端到ubuntu机器。

现在,我将采用一个包含所有必要软件的docker镜像,例如:安装在其中的apache。稍后我将部署一个示例应用程序(它是一个Web应用程序,并保存它。

现在,我处于一种混乱模式,如果它正常运行,如何检查已部署的应用程序。即,包含已部署应用程序的容器的地址是什么。 例如: - 如果我输入http://127.x.x.x这是ubuntu机器的地址,我只是抽出时间。

任何人都可以告诉我如何验证已部署的应用程序。此外,在控制台上打印程序的输出工作似乎没有问题,因为输出被打印出来,我对网络应用程序只有一些疑问。

5 个答案:

答案 0 :(得分:8)

有一些可能性来检查您的应用是否正在运行。

远程API

正如 JimiDini 所说,一种可能性是Docker远程API。您可以使用它来查看所有正在运行的容器(这将是您的用例,对吗?),检查某个容器或启动和停止容器。 API是一个REST-API,具有多种编程语言绑定(https://docs.docker.io/reference/api/remote_api_client_libraries/)。其中一些非常过时。要从另一台机器使用Docker远程API,我需要明确地打开它:

docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d &

请注意,API现在向全世界开放!在实际情况中,您需要以某种方式保护它(例如,请参阅http://java.dzone.com/articles/securing-docker%E2%80%99s-remote-api处的示例)。

Docker PS

要查看所有正在运行的容器在您的主机上运行docker ps。这将列出所有正在运行的容器。如果您没有看到您的应用,则表明它未运行。它还会显示您的应用程序正在公开的端口。您也可以通过远程API执行此操作。

日志

您还可以查看日志。您可以运行docker attach <container id>以附加到某个容器并查看其标准输出。您也可以运行docker logs <container id>来接收Docker日志。我更喜欢将日志写入某个目录,例如所有日志都记录到/var/log并将此文件夹挂载到我的主机。然后,您的所有日志都会在您的主机上/home/ubuntu/docker-logs结束。

docker run -p 80:8080 -v /home/ubuntu/docker-logs:/var/log:rw my/application

一个字到端口和IP

每个容器都将获得自己的IP地址。您可以通过远程API或主机上的Docker直接检查此IP地址。您还可以为容器指定某个主机名(通过将--hostname="test42"传递给run命令)。但是,你大多不需要那样做。

要访问容器中的应用程序,您需要打开容器中的端口并绑定到主机上的端口。

在您的Dockerfile中,您需要EXPOSE运行您应用的端口:

FROM ubuntu
...
EXPOSE 8080
CMD run-my-app.sh

启动容器时,需要将此端口绑定到主机端口:

docker run -p 80:8080 my/application

现在,您可以通过http://localhost:80http://127.0.0.1:80访问您的应用。

如果您的应用没有响应,请通过键入docker ps或远程API来检查容器是否正在运行。如果它没有运行,请检查日志以找出原因。

(注意:如果您在VirtualBox中运行Ubuntu VM并尝试从Windows机器访问它,请确保在VirtualBox中也打开了端口!)。

答案 1 :(得分:6)

Docker容器有一个单独的IP地址。默认情况下它是私有的(只能从主机访问)。

Docker通过其API提供所有元数据(包括IP地址):

  1. https://docs.docker.io/reference/api/docker_remote_api_v1.10/#inspect-a-container
  2. https://docs.docker.io/reference/api/docker_remote_api_v1.10/#monitor-docker-s-events
  3. 您还可以查看一个名为docker-gen的小工具,以获取灵感。它使用模板监视docker-events并在主机上创建配置文件。

答案 2 :(得分:3)

要获取docker容器的ip地址,如果你知道它的id(长十六进制字符串)或你是否命名它:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-id-or-name>

答案 3 :(得分:0)

从2020年开始工作

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

答案 4 :(得分:0)

Docker正在运行自己的网络,要获取有关它的信息,可以运行以下命令:
docker network ls
docker network inspect <network name>
docker inspect <container id>

但是,关于Dockerfile和docker run命令,我们还需要注意以下几点:

  • 当您EXPOSE在Dockerfile中的端口时,无法从Docker外部访问容器中的服务,而只能从其他Docker容器内部访问容器
  • 并且当您EXPOSE并使用docker run -p ...标志时,即使在Docker外部,也可以从任何位置访问容器中的服务

因此,例如,如果您的Apache在端口8080上运行,则应在Dockerfile中公开它,然后可以将其运行为: docker run -d -p 8080:8080 <image name>,您应该可以从主机上的HTTP:// localhost:8080访问它。

这是一个古老的问题/答案,但可能会对其他人有所帮助;)