繁体   English   中英

如何从 docker 容器连接到本地 IIS 上的主机名?

[英]How to connect to a hostname on local IIS from docker container?

我有一个简单的 python web 应用程序,如下所示,我试图在 docker 容器中进行容器化并运行。 端点 '/' 和 '/es' 工作,因为它托管在本地主机上。

我在 IIS 中有一个网站,自定义主机名为www.devtenant1.local:777 ,它映射到我的主机主机文件中的 127.0.0.1。 如何从使用自定义主机名在主机上运行的 docker 容器访问该网站?

下面的代码

import json
from flask import Flask
import requests

app = Flask(__name__)


@app.route("/") *#this works*
def main():
    return "Welcome!"


@app.route("/es") *#this works*
def connect_to_es():
    result = requests.get("http://host.docker.internal:9200/")
    return result.json()


@app.route("/values") *#this doesn't work. What should be my URL in get() below*
def get_values():
    headers = {'content-type': 'application/json'}
    result = requests.get("https://www.devtenant1.local:777/api/values", headers=headers, verify=False)
    return result.json()

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')

我尝试使用docker rundocker build在容器内添加以下主机条目,但它不起作用 -

  • --add-host=www.devtenant1.local:172.17.0.1(网关)
  • --add-host=www.devtenant1.local:172.17.0.2(IP地址)
  • --add-host=www.devtenant1.local:0.0.0.0 (来自建议之一)
  • --add-host=www.devtenant1.local:10.1.10.160(来自其中一项建议)

请按照以下步骤操作。

1.使用ipconfig命令查找私有IP。 我的ip是 . . *

2.docker 容器在机器上运行

3.使用docker exec命令进入容器并在第一步尝试ping IP。

4.所以你可以看到从容器内部可以访问私有IP。 因为它在同一网络中并且 docker 使用桥接网络来创建容器。

5.我可以在容器 ip:80 中使用 curl 命令访问我的 iis 主页给出 200 响应。

6.在主机文件中添加条目我可以从docker内部使用FQDN ping。 因为现在私有 ip 被映射到www.devtenant1.local dns.now 我们能够从 docker 容器内部使用 FQDN ping,它指向我在第一步中获得的私有 ip。 Docker run / docker build --add-host=devtenant1.local:10.1.10.160 这将在 /etc/hosts 文件中添加条目,如下所述

127.0.0.1 localhost
10.1.10.60 devtenant.local

只是不要包含 https:// 或 www 部分。

7.此外,我使用相同的 fqdn www.devtenant1.local (默认端口 80)从我的本地获得响应,在您的情况下是www.devtenant1.local:777

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM