当前位置: 首页 > 知识库问答 >
问题:

Docker直接访问容器IP/端口

樊熠彤
2023-03-14

我有docker容器用于实验。所以我不知道以后尝试新应用时会使用哪些端口。在docker-run命令中使用ip/port从主机访问docker容器应用程序而不公开它,这是不可能的吗?

共有2个答案

商茂勋
2023-03-14

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

https://docs.docker.com/docker-for-mac/networking/#i-无法ping我的容器

陶文林
2023-03-14

更新:OP没有在原始问题中提供它是关于mac的docker

原始答复:

是的,你能做到。

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

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

docker container inspect boring_pare

此外,你提到:

在docker-run命令中使用ip/port从主机访问docker容器应用程序而不公开它,这是不可能的吗?

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

>

  • 关于EXPOSE/Dockerfile的文档

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

    docker中“公开”和“发布”的区别

    更新@robie2011评论的答案:

    下面,我运行3个命令:

    1. 运行一个nginx容器,而不将端口80发布到主机端口
    2. 检查其ip地址
    3. 使用curlfromhost访问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>
    $
    

  •  类似资料:
    • 问题内容: 到目前为止,我们使用了几个Linux用户: system_foo @ server system_bar @服务器 … 我们希望将系统用户放入docker容器中。 linux用户->容器 服务器内部的更改没有问题,但是远程系统使用这些用户向我们发送数据。 我们需要工作。远程系统无法更改。 如果每个linux操作系统只有一个系统(将端口22传递到容器),我将非常容易。但是有几个。 我们如

    • 端口映射可以访问, 但我还是习惯通过ip标识服务, 而不是端口标识服务. 主机(win11)通过容器ip直接连不通docker容器, 使用起来不是太方便. 尝试了网上一些方法, 不知为啥都么有成功... 比如: docker for windows 容器内网通过独立IP直接访问的方法 - brock0624 - 博客园 ipconfig 输出↓,不知道应该用哪个网卡来转发流量呢,就是说路由该怎么配

    • 问题内容: 我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器? 编辑:我正在Linux机器上本地运行docker。 更新: 除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作: 问题答案: 在Linux上本地运行Docker时,您可以使用接口

    • 我有一个docker容器在运行Jenkins。作为构建过程的一部分,我需要访问在主机上本地运行的web服务器。有没有一种方法可以将主机web服务器(可以配置为在端口上运行)公开给jenkins容器? 编辑:我正在Linux机器上原生运行docker。 更新: 除了@larsks下面的答案之外,要从主机获取主机IP的IP地址,我还做了以下操作:

    • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

    • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为