我有一个简单的python网络应用程序,如下所示,我试图将其容器化在docker容器中并运行。端点“ /”和“ / es”在本地主机上工作。
我在IIS中有一个网站,其自定义主机名为www.devtenant1.local:777,该网站映射到我的主机hosts文件中的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 run
或docker build
在容器内部添加以下主机条目,但这不起作用-
答案 0 :(得分:0)
请按照以下步骤操作。
1。使用ipconfig命令查找私有IP。我的IP地址是。。。 *
2.docker容器在机器上运行
3。使用docker exec命令进入容器并尝试在第一步中ping IP。
4。因此您可以看到从容器内部可以访问专用ip。因为它和docker在同一网络中,而docker使用网桥网络来创建容器。
5。我可以在容器ip:80内使用curl命令访问iis主页,给出200条响应。
6。在hosts文件中添加条目我能够从docker内部使用FQDN进行ping操作。 因为现在私有IP已映射到www.devtenant1.local dns。现在我们可以从docker容器内部使用FQDN进行ping操作,这指向第一步中获得的我的私有IP。 Docker运行/ 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