我是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.
答案 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。