有一些方法可以检查您的应用是否正在运行。
远程 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:80 或http://127.0.0.1:80 访问您的应用。
如果您的应用没有响应,请通过键入 docker ps 或远程 API 检查容器是否正在运行。如果它没有运行,请检查日志以了解原因。
(注意:如果您在 VirtualBox 之类的设备中运行 Ubuntu 虚拟机并尝试从 Windows 机器访问它,请确保您也打开了 VirtualBox 中的端口!)。