【问题标题】:Docker access container IP/Port directlyDocker直接访问容器IP/Port
【发布时间】:2017-11-13 09:47:15
【问题描述】:

我有用于实验的 docker 容器。所以我不知道以后在尝试新应用程序时会使用哪些端口。 难道不通过docker-run命令暴露主机的ip/port就可以访问docker容器应用吗?

【问题讨论】:

标签: docker docker-for-mac


【解决方案1】:

更新: OP 没有在原始问题中提供关于 docker-for-mac 的信息,因此如果您使用的是此版本的 docker,则无法应用其余部分。


原答案:

是的,你可以这样做。

假设您有一个名为 boring_pare 的容器和一个在端口 8080 上运行的 Web 应用程序。您可以通过请求http://[ip_of_boring_pare]:8080从您的主机访问它。如果你使用默认的 docker 网络,这个 ip 可能在172.17.0.xxx 范围内。

要查找此 IP,您可以使用 inspect 您的容器:

docker container inspect boring_pare

另外,你提到:

是否可以通过主机的 ip/port 访问 docker 容器应用程序,而无需在 docker-run 命令中公开它?

这里的正确术语是发布。延伸阅读:

  • Documentation 关于EXPOSE / Dockerfile

    ...EXPOSE 指令实际上并未发布端口。它充当构建映像的人和运行容器的人之间的一种文档类型,关于打算发布哪些端口。要在运行容器时实际发布端口,请使用docker run 上的-p 标志来发布和映射一个或多个端口,或者使用-P 标志来发布所有公开的端口并将它们映射到高阶端口。

  • Difference between “expose” and “publish” in docker


更新回复@robie2011的评论:

下面,我运行 3 个命令:

  1. 运行nginx 容器而不将port 80 发布到host 端口
  2. 检查其ip address
  3. 使用host中的curl访问nginx主页

我的控制台输出:

$ docker run --rm --name some-nginx -d nginx
0e53d3b5ef6d65a4731c4066f3523c5ecd3c118abedae44b33e89fdf8e401632

$ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' some-nginx
172.17.0.3

$ curl 172.17.0.3
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
$

【讨论】:

  • 在我的情况下不起作用。这里有两个例子:docker run --name some-nginx -d nginx 这里是证明这应该在端口 80 上工作 docker run -p9999:80 --name some-nginx2 -d nginx
  • @robie2011 我在答案的末尾添加了当我 curlhostcontainer 通过您的第一个命令运行时得到的结果。
  • 我按照您的步骤操作,但对我不起作用。我正在使用 macosx 并且有以下运行时 pastebin.com/q866LHRc 可能是 mac 问题?
  • @robie2011 正好是The docker (Linux) bridge network is not reachable from the macOS host.。我认为@tgogos 没有使用 MacOS
【解决方案2】:

Docker for Mac 无法将流量路由到容器,以及从容器返回主机。

https://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2022-11-01
    • 2016-05-05
    相关资源
    最近更新 更多