获取Docker容器的IP地址

我有一个Ubuntu机器,这是一个虚拟机,我已经安装了泊坞窗。 我从我的本地Windows机器上使用这台机器做ssh,打开terminal到Ubuntu机器。

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

现在,我正处于一种困惑的模式,就像如何检查部署的应用程序是否正常运行一样。 即包含已部署的应用程序的容器的地址是什么。 例如: – 如果我键入http://127.xxx这是Ubuntu机器的地址,我只是得到时间。

任何人都可以告诉我如何validation部署的应用程序。 此外,在控制台上打印程序的输出工作得很好,输出打印出来,唯一让我怀疑的是Web应用程序。

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

远程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>来附加到某个容器并查看它的stdout。 您也可以运行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访问您的应用程序。

如果您的应用程序没有响应,请通过inputdocker ps或远程API来检查容器是否正在运行。 如果没有运行,请检查日志中的原因。

(注意:如果你像VirtualBox那样运行你的Ubuntu虚拟机,并试图从你的Windows机器上访问它,请确保你在VirtualBox中也打开了端口!)。

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

你也可以看看一个名叫docker-gen的小工具来获取灵感。 它监视docker事件并使用模板在主机上创buildconfiguration文件。

要获得一个docker容器的IP地址,如果你知道它的id(一个长的hexstring)或者你命名了它:

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