Posts Docker 踩坑合集
Post
Cancel

Docker 踩坑合集

  今天检查服务器运行状况的 Git Action 突然报错, 连上服务器一看.容器都在正常运行啊.怎么会报错呢.看了下日志 Tue Jul 27 2021 11:09:04 GMT+0000 (Coordinated Universal Time) Connect mongoose failed with error: connect ECONNREFUSED 172.17.0.2:27017 原来是mongodb的容器的 ip 发生了变化.现在才知道 docker 容器是动态分配 ip 的,看了下现在的 ip 是 172.17.0.4. 在看看别的容器的ip 172.17.0.2 和 172.17.0.3. 所以看起来容器的 ip 是根据容器的启动顺序来的分配的.那么因为后端代码需要固定的 ip ,所以我们的 mongodb 的容器也需要固定的 ip .

1.解决过程

一开始想简单了,看了下文档说设置固定ip的命令大概是这样的

1
2
3
docker run -p 27017:27017 -v /mongodb:/data/db --name mongodb --network bridge --ip 172.17.0.2 --restart=always -d mongo --auth
# 但是报错信息如下
#docker: Error response from daemon: user specified IP address is supported on user defined networks only.

在翻翻文档,原来需要自定义一个网络.

1
2
3
4
# 创建一个自定义网络命令
docker network create --subnet=[自定义网络广播地址]/[子网掩码位数] [自定义网络名]
# 实例
docker network create --subnet=172.20.0.0/16 userDefined
1
2
3
4
# 创建容器并固定ip
docker run -it --name [容器名] --net [网络名] --ip [选定网络下固定 IP 地址] 
# 实例
docker run -p 27017:27017 -v /mongodb:/data/db --name mongodb --net userDefined --ip 172.20.0.2 --restart=always -d mongo --auth

但是这样的需要让后端服务也同处于这个网段里面,所以需要我的解决办法是也给我的后端服务的容器也设置一个同网段的固定ip.当然了或许还有别的workaround.但是我选择了一个目前对我来说最简单的方法.

This post is licensed under CC BY 4.0 by the author.

低成本备份数据库数据到云端

搭建属于自己的服务器