Docker直接访问容器IP/端口

Docker直接访问容器IP/端口,docker,docker-for-mac,Docker,Docker For Mac,我有用于实验的docker容器。因此,我不知道稍后尝试新应用时将使用哪些端口。 如果不在docker run命令中公开docker容器应用程序,是否可以从主机访问具有ip/port的docker容器应用程序?更新:OP没有提供原始问题中关于mac的docker,因此如果您使用此版本的docker,则无法应用其余内容 原始答案: 是的,你能做到 假设您有一个名为boring\u pare的容器和一个运行在端口8080上的web应用程序。通过请求http://[ip\u of\u pare]:80

我有用于实验的docker容器。因此,我不知道稍后尝试新应用时将使用哪些端口。
如果不在docker run命令中公开docker容器应用程序,是否可以从主机访问具有ip/port的docker容器应用程序?

更新:OP没有提供原始问题中关于mac的
docker
,因此如果您使用此版本的docker,则无法应用其余内容


原始答案:

是的,你能做到

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

要查找此IP,您可以使用以下方法检查容器:

docker container inspect boring_pare

此外,你提到:

如果不在docker run命令中公开docker容器应用程序,是否可以从主机访问具有ip/port的docker容器应用程序

这里正确的术语应该是出版。进一步阅读:

  • 关于
    公开
    /Dockerfile

    …EXPOSE指令实际上并不发布端口。它作为构建映像的人员和运行容器的人员之间的一种文档类型,用于发布哪些端口。要在运行容器时实际发布端口,请使用
    docker run
    上的
    -p
    标志发布并映射一个或多个端口,或使用
    -p
    标志发布所有公开的端口并将其映射到高阶端口


更新回答客户的评论:

下面,我运行3个命令:

  • 运行
    nginx
    容器,而不将
    端口80
    发布到
    主机
    端口
  • 检查其
    ip地址
  • 使用
    curl
    host
    访问
    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--rm--name一些nginx-d nginx
    0E53D3B5EF6D65A4731C4066F3523C5ECD3C118ABEDEA44B33E89FDF8E401632
    $docker container inspect--格式化{{.NetworkSettings.IPAddress}}某些nginx
    172.17.0.3
    $172.17.0.3
    欢迎来到nginx!
    身体{
    宽度:35em;
    保证金:0自动;
    字体系列:Tahoma、Verdana、Arial、无衬线字体;
    }
    欢迎来到nginx!
    如果您看到此页面,则nginx web服务器已成功安装,并且
    工作需要进一步配置

    有关在线文档和支持,请参阅 .
    商业支持可从以下网址获得:

    感谢您使用nginx

    $
    Docker for Mac无法将流量路由到容器,也无法将流量从容器返回到主机


    基本上,您希望在运行的容器中公开新端口,对吗?以下是docker论坛的相关讨论。我试过其中一些,发现效果很好。对我来说不起作用。这里有两个例子:
    docker-run——命名一些nginx-d nginx
    这里有一个证明,这应该可以在端口80上运行
    docker-run-p9999:80——命名一些-nginx2-d nginx
    @robie2011我在回答的末尾添加了我从
    curl
    主机运行到
    容器运行时得到的结果。I按照你的步骤做,但对我不起作用。我正在使用macosx,并有以下运行时可能是mac问题?@robie2011确切地说
    无法从macOS主机访问docker(Linux)网桥网络。
    。我认为@tgogos没有使用MacOS