一.准备工作
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-reload
systemctl 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-full
RUN mkdir -p /raint-app
WORKDIR /raint-app
ARG JAR_FILE=target/raint-app.jar
COPY ${JAR_FILE} raint-app.jar
EXPOSE 18008
ENV 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: true
services:
raint-app:
build:
context: .
restart: always
ports:
- 18008:18008
container_name: raint-app
networks:
- "mynet"
hostname: raint-app
image: 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: -1
stderr:
在 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里面的信息吧)。