一.准备工作
1、docker开放6274端口
开放6274端口vim /lib/systemd/system/docker.service将13行左右内容ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改为下面ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:6274 -H unix://var/run/docker.sock重启docker服务systemctl daemon-reloadsystemctl restart docker防火墙放开6274端口,如果是云服务器记录配置安全规则放开后可以在浏览器输入http://host:6274/version测试或者curl http://host:6274/version
2.下载基础jdk8镜像
docker pull java:8
3.去dockerdesktop官网安装,并在idea配置
注意:报错
Can not construct instance of com.spotify.docker.client.messages.RegistryAuth: no String-argument constructor/factory method to deserialize from String value ('desktop')at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.LinkedHashMap["credsStore"])
解决方法:
修改config.json为如下
C:\Users\Frank\.docker\config.json
{}

4、IDEA测试连接
tcp://xxxx:6274
5.使用
二.idea集成
1.
第一种方式:不推荐
使用pom.xml生成Dockerfile
<properties><java.version>1.8</java.version><shiro.version>1.4.0</shiro.version><elasticsearch.version>7.6.2</elasticsearch.version><!-- 镜像 前缀姓名szls--><docker.image.prefix>szls</docker.image.prefix></properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.2.1.RELEASE</version></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!-- 镜像名称 dts 注意:image名称不能含大写字母--><imageName>${docker.image.prefix}/${project.artifactId}</imageName><!--指定标签--><imageTags><imageTag>latest</imageTag></imageTags><!-- 基础镜像jdk 1.8--><baseImage>java:8</baseImage><!-- 制作者提供本人信息 --><maintainer>tomato4536@163.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://82.156.27.52:6274</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>
第二种方式:推荐
自定义Dockerfile利用pom.xml生成镜像并推送
FROM moxm/java:1.8-fullRUN mkdir -p /raint-appWORKDIR /raint-appARG JAR_FILE=target/raint-app.jarCOPY ${JAR_FILE} raint-app.jarEXPOSE 18008ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/prod/./urandom"CMD sleep 30; java -jar raint-app.jar $JAVA_OPTS
2.dockercompose.yml
version: '3'# 声明外部网络,避免报错‘使用一个无效的network’networks:mynet:external: trueservices:raint-app:build:context: .restart: alwaysports:- 18008:18008container_name: raint-appnetworks:- "mynet"hostname: raint-appimage: raint-app
手动
docker run -d -p 8006:8006 --name raint-app --restart=always raint-app:latest
注意:
基于WSL2 的 Docker Desktop 启动时 Failed to set version to docker-desktop: exit code: -1的解决方法
System.InvalidOperationException:Failed to set version to docker-desktop: exit code: -1stderr:在 Docker.ApiServices.WSL2.WslShortLivedCommandResult.LogAndThrowIfUnexpectedExitCode(String prefix, ILogger log, Int32 expectedExitCode) 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\WSL2\WslCommand.cs:行号 146在 Docker.Engines.WSL2.WSL2Provisioning.<ProvisionAsync>d__8.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\WSL2Provisioning.cs:行号 82--- 引发异常的上一位置中堆栈跟踪的末尾 ---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)在 Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__25.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\LinuxWSL2Engine.cs:行号 99--- 引发异常的上一位置中堆栈跟踪的末尾 ---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)在 Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:行号 29--- 引发异常的上一位置中堆栈跟踪的末尾 ---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)在 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行号 67--- 引发异常的上一位置中堆栈跟踪的末尾 ---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行号 92
启动 WSL 2时警告“参考的对象类型不支持尝试的操作”
管理员方式执行cmd命令  
 
netsh winsock reset

Docker Desktop启动失败(Docker failed to initialize Docker Desktop is shutting down)
将 C:\Users\YourUser\AppData\Roaming 目录下Docker目录重命名。比如改为Docker_backup(这样做其实相当于删除了原信息但还把它里面的信息拷贝到备份里)。之后直接点击docker desktop发现可以运行了。但是因为删除了原来信息需要重新启动一下,启动之后发现原来的容器和镜像都在。(可能是自动调用了Docker_backup里面的信息吧)。
