如何在Ubuntu中使用类似于docker.for.mac.localhost的东西?

时间:2019-06-27 03:15:08

标签: docker ubuntu networking ubuntu-18.04

我需要使用名称而不是IP或本地主机,是否有可能获得类似于return( Object.keys(prods).map((key, i) => ( <div key={prods[key]._id}> <h3>{prods[key].name}</h3> </div> )) ) 的信息?

更新 我的用例是,我在localhost:8243和9443上运行WSO2 API管理器。我正在运行docker映像,并且在该容器(8443)中,它需要访问API Manager中部署的API。

当我使用docker.for.mac并在docker组件(必须定义API Url)中使用“ localhost”时,出现错误

--net=host

3 个答案:

答案 0 :(得分:1)

据我所知,没有直接的等效项。

如果您尝试访问主机上的另一个端口(:PORT),则可以使用--net=host运行第二个容器,并从容器内部访问localhost:PORT上的第一项服务

如果这不起作用,我最近阅读的另一种解决方案是在启动主机时将主机的DNS | IP传递到您的容器中,然后使用该变量进行引用以从容器内访问主机:

docker run ... --env=HOST=[[YOUR-HOST-ADDRESS]] ...

答案 1 :(得分:1)

  

我需要使用名称而不是IP或本地主机

如果该部分是您真正要寻找的部分,则可以通过将一个条目添加到/etc/hosts文件中,然后在其中添加一个localhost的条目(这是“ 127.0.01的别名)

127.0.0.1     localhost
127.0.0.1     yourfancydomain.com
127.0.0.1     asmanyalias-asyou.wish

然后转到浏览器并直接转到该地址,并使用您应该已经在Docker容器中共享的端口


进一步解释docker端口的问题:

启动容器时,可以将主机中的端口绑定到需要从外部访问的dockerized服务的任何端口:

docker run --name nginx -p 8080:80 nginx

这将允许您使用8080端口访问容器内运行的服务的80端口。

所以...在将本地主机别名附加到您的自定义本地域之后,您可以通过以下操作访问您的nginx服务(在上面的示例中):

your-custom-domain:8080

如果您绑定到docker服务的端口恰好是80-p 80:80),那么您甚至可以只使用自定义域(根本没有端口)

your-custom-domain

答案 2 :(得分:1)

  

对于该用例,当您希望容器化服务能够访问主机中(外部)运行的另一服务时,但使用自定义主机名而不是“ localhost”的ip(带或不带--net) =主机):

您可以通过以下两种可能的方式之一(为您方便),向带有--add-host参数的容器添加额外主机来实现此目的:

  1. 使用实际主机的IP(使用--net=host
docker run -it --net=host --add-host=wso2-api:$YOUR-HOST-IP consumer/service
  1. 使用Docker主机的IP(直接在您的 docker0 网络内部)
docker run -it --add-host=wso2-api:$DOCKER_HOST_IP consumer/service

在两种情况下,您的容器化服务都将使用该自定义地址(在我的示例中为 wso2-api ),并且(因为主机名将包含在容器的/etc/hosts文件中)自定义主机名将正确解析为您所需的实际IP地址。但是满足了对匹配主机名的要求(在这种情况下,因为您需要匹配证书中的名称)。


如何确定DOCKER_HOST_IP

手动:您可以只列出所有当前分配的IP地址,以找到与 docker0 网络相对应的IP地址:

ip -4 addr

或者通过直接过滤所需的内容更好:

ip -4 addr show docker0

您将获得类似以下的输出:

  

3:docker0:mtu 1500 qdisc noqueue

     

inet 172.17.0.1/16 brd 172.17.255.255作用域全局docker0

     

永远有效_lft永远永久_pft

并复制inet

之后显示的IP

自动:我使用此单个脚本直接获取我当前的docker主机IP(在与其他docker节点进行测试时特别有用):

DOCKER_HOST_IP="$(ip -4 addr show docker0 | awk '$1=="inet" {print $2}' | cut -d/ -f1 )"

现在,您只需启动一个简单的高山容器即可执行非常快速的概念验证:

docker run -it --add-host=wso2-api:$DOCKER_HOST_IP alpine

,然后在sh提示符下出现,只需尝试通过以下方式访问您正在运行的api服务:

nc -zv wso2-api 8243

享受! :)