在服务器上创建了一个docker环境,在其中运行web后端
我用的是flask框架,如果在服务器上运行下列程序,在本地浏览器输入 服务器IP:5000
即可出现Hello World!
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
但是在docker中运行上述代码的话,想在本地用同样的IP打开页面,却显示无法访问。
原因在于,创建docker容器时,默认会改变IP地址。
docker创建有三种网络类型:bridge, none, host
bridge:桥接网络
默认情况下启动的Docker容器,都是使用
bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了。
none:无指定网络
使用 --network=none ,docker 容器就不会分配局域网的IP
host: 主机网络
使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。
启动 Docker的时候,用 --network 参数,可以指定网络类型
看到这想必知道,如果想在本地用服务器的IP打开页面,需要在创建docker时指定网络类型为host,这样容器的IP就和服务器的IP地址一样了:
docker run -it --name test1 --network host centos:latest /bin/bash