Docker 为什么要通过浏览器访问容器我必须设置相同的主机:容器端口?
正如问题所说。这是我的情况。Docker 为什么要通过浏览器访问容器我必须设置相同的主机:容器端口?,docker,docker-compose,Docker,Docker Compose,正如问题所说。这是我的情况。 我的项目文件夹是: PROJ |____docker-compose.yml |____servDir/ |____Dockerfile |____server.py 在docker-compose.yml中: service1: image: img1:v0.1 container_name: cont1 build: ./servDir/. ports: -
我的项目文件夹是:
PROJ
|____docker-compose.yml
|____servDir/
|____Dockerfile
|____server.py
在docker-compose.yml中:
service1:
image: img1:v0.1
container_name: cont1
build: ./servDir/.
ports:
- "5001:5002"
server.py:
从烧瓶导入烧瓶,请求
导入json
app=烧瓶(名称)
端口=5001
@app.route(“/问候语/”)
def hello():
返回“你好,世界!”
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run(host=“0.0.0.0”,port=int(port),debug=True)
当我运行docker compose up
并转到http://localhost:5001/greetings/
我收到一个错误连接被拒绝
相反,如果将端口设置为5001:5001
,则可以接收页面内容
为什么??我是否应该将它们设置为始终相等,以便通过浏览器访问容器
我认为端口配置是HOST:CONTAINER,而浏览器将是主机服务
更新:Dockerfile:
FROM python:3
WORKDIR /home/python/app/
COPY . /home/python/app/
RUN chmod a+x *.py
CMD ["python", "./server.py"]
这是正确的:
HOST:CONTAINER
尝试使用此选项为您的本地主机和LAN公开它:
service1:
image: img1:v0.1
container_name: cont1
build: ./servDir/.
ports:
- "0.0.0.0:5001:5002"
或仅将此消息发送到您的本地主机:
service1:
image: img1:v0.1
container_name: cont1
build: ./servDir/.
ports:
- "127.0.0.1:5001:5002"
你还写道:
当我运行docker compose并转到时,我收到一个错误连接被拒绝
查看docker compose,您应该这样访问它:
-->
更改server.py
config:
from flask import Flask, request
import json
app = Flask(__name__)
PORT = 5002
@app.route("/greetings/")
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=int(PORT), debug=True)
是的,我注意到我的打字错误,很快就改正了,但你比我快。我将尝试您的解决方案:D.thanxTry访问。如果它也不起作用,请检查您的
hosts
文件,确保您有127.0.0.1 localhost
。我在我的hosts文件中有127.0.0.1 localhost
,这是因为您在server.py
配置中设置了端口5001
,但您暴露的容器端口是5002
,我确认。如上所述:即使我在docker compose中切换端口:``端口:-“0.0.0.0:5002:5001``它也不工作。它工作的唯一方式是当两个值相同时,5001:5001
。为什么?