如何在网络中访问Docker镜像?

时间:2020-04-06 19:28:27

标签: docker docker-machine

我是docker的新手,我正在努力运行一个要在本地主机访问的映像。 这是我正在使用的顺序。

1.docker-machine start default (starting vm)
2.docker-machine env
3.(coping the @for command which has displayed and paste to my terminal)
4.docker run -d -p 127.0.0.1:8000:80 image_id
 it generates the long string, container I guess
5.docker container run image_id - this says that "Application startup complete."

之后,我想使用上述IP在浏览器中访问它。该页无法显示。我究竟做错了什么 ?我是Windows用户

这也是运行最后一条命令后的终端消息:

[2020-04-06 19:50:15 +0000] [1] [INFO] Starting gunicorn 20.0.4
[2020-04-06 19:50:15 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
[2020-04-06 19:50:15 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2020-04-06 19:50:15 +0000] [7] [INFO] Booting worker with pid: 7
[2020-04-06 19:50:15 +0000] [7] [INFO] Started server process [7]
[2020-04-06 19:50:15 +0000] [7] [INFO] Waiting for application startup.
[2020-04-06 19:50:15 +0000] [7] [INFO] Application startup complete.

3 个答案:

答案 0 :(得分:1)

由于您使用了docker-machine,因此请查看docker-machine env的输出以获取Docker VM的IP地址。然后在发布的端口上连接到该IP地址。通常,在您的示例中,该端口为端口8000,但是您已绑定到环回接口,该接口在运行时无法从外部访问:

docker run -d -p 127.0.0.1:8000:80 image_id

因此找到该容器(docker container ls),将其停止(在容器ID或名称上为docker container stop),然后使用以下命令启动一个新容器:

docker run -d -p 8000:80 image_id

然后在端口8000上连接到docker-machine VM的IP地址以访问您的应用程序。请注意,以上命令中的第二个端口号(80)必须与您的应用程序在容器内正在侦听的端口相匹配。因此,如果您已根据此处的其他答案在应用程序中更改了此端口,则需要在上方更改目标端口。

答案 1 :(得分:0)

首先,使用以下命令检查容器是否在实际运行:docker ps

如果您没有看到列出的容器,则它必须已经退出。检查日志以进行故障排除。

如果确实看到您的容器已列出,请确保要在网络浏览器中转到localhost:8000

如果您已经做到了这一点,那么还有一些其他潜在的问题,我无法从本文中破译。

答案 2 :(得分:0)

这不是Docker问题。

您需要在您的gunicorn配置中绑定0.0.0.0:8000

如果您正在dockerfile中使用CMD运行,请更新CMD(添加-b 0.0.0.0:8000):

CMD gunicorn -b 0.0.0.0:8000

然后使用以下内容访问:

http://localhost:8000

有关更多详细信息,请参见this