1. 准备个文件夹
这是我的路径
/usr/local/springboot/docker-daka/docker_files
2. 将jar包上传
springboot项目打包——maven的package
这是整个项目打包的模式,也可以分离依赖、配置和程序进行打包,详情看我这篇文章:
springboot依赖 配置 程序 分离打包成jar包
这里我以不分离的模式演示:
-
将上面这个jar包上传至步骤1创建的目录下
-
我这里使用的是宝塔面板进行辅助,点击文件,直接将jar包拖入右侧空白处就能上传
3. 创建Dockerfile文件,并进行配置
这是我的配置,比较简单,更详细的配置请看这篇:
使用Dockerfile构建镜像
4. 构建镜像
docker build -t test-daka .
test-daka
是镜像名字
命令最后一个是点,切记不要忘记
5. 构建容器
docker run -d --name daka -p 11003:11003 test-daka
容器名字是daka
宿主机和容器端口都是11003
使用的镜像是test-daka
在上述操作中,步骤5有个坑。
用ai搜了一下午,没搞定,自己搜了一下,秒找到答案,希望大家适当用ai。
以下是完整的报错:
docker: Error response from daemon: driver failed programming external connectivity on endpoint daka (xxxxxxxxxxxxxxxxxxxxxxxxxxx): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 11003 -j DNAT --to-destination xxx.xx.x.x:11003 ! -i docker0: iptables: No chain/target/match by that name.
解决方案
- ① 检查内核模块
lsmod | grep br_netfilter
如果输出中没有br_netfilter
,需要加载该模块。命令如下:
sudo modprobe br_netfilter
- ② 手动添加iptables规则
sudo iptables -P FORWARD ACCEPT
sudo iptables -A FORWARD -i docker0 -j ACCEPT
sudo iptables -A FORWARD -o docker0 -j ACCEPT
这些规则将允许Docker容器与主机和其他容器进行网络通信。
- ③ 重启Docker服务
sudo systemctl restart docker
我是步骤①正常,手动执行了步骤②和③ ,再执行步骤5构建容器的命令,就正常了。