docker 网络相关与坑

docker的网络

我们在使用docker run创建Docker容器时,可以用–network标志 选项指定容器的网络模式,Docker有以下4种网络模式:
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID 指定。

Docker 网络:host模式
docker容器网络bridge
Docker Network—Bridge 模式

爬坑

解决:docker容器内可以访问web应用,端口映射到宿主机却无法访问,错误代码:curl: 56 Recv failure: 连接被对方重设----xys借鉴该方法解决了问题,具体操作见 uvicorn|更改fastapi服务器运行host和port

本人所用的是flask项目,项目启动默认用的host是127.0.0.1,port端口是5000,而我们docker端口默认映射的host是0.0.0.0,所以需要把flask监听地址改为0.0.0.0

docker curl: (56) Recv failure: 连接被对方重设
docker curl: (56) Recv failure: Connection reset by peer问题解决方法

本机IP地址、 127.0.0.1 和 0.0.0.0 的区别----(xys:举例值得一看,这也是为啥docker中的fastapi应该监听0.0.0.0,而不是环回地址127.0.0.1----如果监听环回地址,岂不是外部来的访问都接收不到吗哈哈)

0.0.0.0 与 127.0.0.1的区别

a、0.0.0.0:它表示的是这样一个集合:所有不清楚的主机和目的网络。
b、255.255.255.255:限制广播地址,这个地址不能被路由器转发。
c、127.0.0.1:本机地址,在Windows系统中,这个地址有一个别名“Localhost”。

docker ssh连接的问题

为了让pycharm能远程连接docker中的开发环境,需要开启ssh服务。具体开启方法见: pycharm专业版连接远程docker容器
开启后,测试指令“ssh [email protected] -p [端口号] ” 可以连接,且pycharm可以正常连接docker环境。
但是,当运用docker container stop将容器关闭,再重启docker container start之后,ssh出了问题

xys@xys-computer:~$ ssh [email protected] -p 8022
报错:ssh_exchange_identification: read: Connection reset by peer
同时,pycharm连接docker也报错:连接被对方重设

临时解决办法,docker exec进入容器,在容器内重启sshd。如下图所示,第一次重启报错,但再次重启就成功了。
docker 网络相关与坑_第1张图片
晕死,其实是sshd服务根本没开启,所以restart会告警,应该用指令:service ssh start.
可以先用service ssh status 检查sshd是否开启:
在这里插入图片描述开机自启动sshd服务的方法:
方法1:[root@localhost ~]# vi /etc/rc.local
      加入:service ssh start 或 /etc/init.d/ssh start
方法2:chkconfig

如果需要自启动某些服务,只需使用chkconfig 服务名 on即可,若想关闭,将on改为off
[root@localhost ~]# chkconfig sshd on
还可以再查看sshd的运行级别状态:
[root@localhost ~]# chkconfig --list sshd
各状态对应关系 sshd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

你可能感兴趣的:(网站开发,docker,网络)