「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战」。
根本报错信息:Failed to start firewalld.service: Unit is masked.(防火墙启动不了)
centos7介绍
使用背景:
1,CentOS7 默认的防火墙 不是iptables, 而是firewalle.
2,端口号使用需要单独放开来提供服务,如:8080,80等常用端口
系统、环境
问题起因:在idea集成docker,连接虚拟机路径测试时,出现以下连接异常提示信息。
解决过程:
发现问题一:查看防火墙状态: systemctl status firewalld,发现防火墙没有开启。
解决方案一:一般情况,开启防火墙后,问题就解决了,然而当开启防火墙时,发现防火墙也开启不了,开启防火墙命令:systemctl start firewalld
问题二:防火墙开启失败
解决方案二:systemctl unmask firewalld
问题可能是上次异常关闭,导致有残留的文件妨碍了防火墙的开启,需要清除原来的firewalld残留文件,然后就可以用systemctl start firewalld来启动防火墙了。
问题三:(可能没有设置端口号,一般为:2375)
解决方案三:
需要在dicker。service下设置docker的端口号,然后再开放端口号,最后需要重启防火墙就可以正常使用了。
设置端口号(vim /lib/systemd/system/docker.service)
重启防火墙(firewall-cmd --reload)
效果:
附加:接下来记录一下idea如何集成docke,一键打包部署微服务
所谓idea集成docker,首先就是先开启docker远程访问。
1、如何开启docker远程访问?
1、 修改该Docker服务文件
1)进入:docker.service ---命令:vi /lib/systemd/system/docker.service 2) 修改:ExecStart这行 ,开启远程访问路径权限--- ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
默认是:(ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock)
2、 重新开启,确认。
#重新加载配置文件
systemctl daemon-reload
#重启服务
systemctl restart docker.service
#查看端口是否开启
netstat -nlpt #如果找不到netstat命令,可进行安装:yum install net-tools
#直接curl看是否生效
curl http://127.0.0.1:2375/info
2、IDEA安装Docker插件
打开Idea,从File->Settings->Plugins->Install JetBrains plugin进入插件安装界面,点击install安装,安装后重启Idea。
3、IDEA配置Docker
从File->Settings->Build,Execution,Deployment->Docker打开配置界面,即上文出现问题的情况,解决后的效果。
配置docker,连接到远程docker服务。
4、docker-maven-plugin
docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。在pom.xml中进行配置
<properties>
<docker.image.prefix>name</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!-- 镜像名称 name/exam-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 基础镜像jdk 1.8-->
<baseImage>java</baseImage>
<!-- 制作者提供本人信息 -->
<maintainer>name@aliyun.com</maintainer>
<!--切换到/ROOT目录 -->
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- 指定 Dockerfile 路径
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
-->
<!--指定远程 docker api地址-->
<dockerHost>http://0.0.0.0:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
完成以上操作,就可以之间用maven打包,启动镜像,开启容器。进行docker操作了。