windows下的docker desktop自己的镜像服务访问宿主机的kafka服务

一.前言


关于这个问题我想应该有很多小伙伴都遇到过,我把网上的大多数方法都试过一遍,发现没有任何作用,今天由于一次偶然的尝试,使我成功的解决的这个困扰我许久的问题。

二.环境说明


安装必要的软件和环境配置

相信大家能看这篇文章一定早就准备好了必要的环境(docker desktop安装、windows开启Hyper-V、WSL、kafka安装),如果还有未准备好的可以在本站搜一搜windows下的docker安装就行了,在这里就不多做论述。

三.上传并启动


3.1上传自己的springboot项目镜像

3.1.1修改配置文件

首先我们需要在自己的springboot项目的配置文件中修改kafka的brokers,将IP改为本机的IP

server:
  port: 8070

spring:
  application:
    name: KafkaDemo
  cloud:
    stream:
      kafka:
        binder:
          brokers: 10.161.78.114:9092
          configuration:
            key-serializer: org.apache.kafka.common.serialization.StringSerializer
            value-serializer: org.apache.kafka.common.serialization.StringSerializer
      bindings:
        input-in-0:
          destination: MyTopic
          group: my-group
        output-out-0:
          destination: MyTopic

#这是我的yaml配置文件,我所使用的是springcloudstream框架,
#大家也可以试一试,可以大大减少kafka配置的工作量

在这里如果大家使用的是localhost:9092的话,你打包到docker上运行的话会出现找不到这个端口的错误警告,即便你宿主机运行了kafka,原因就是端口映射找不到,为了避免这样的情况,我也是直接修改的IP设置,这也是今天我尝试的方法。

3.1.2创建一个Dockerfile文件

在修改完配置文件之后,我们需要在我们springboot根目录中创建一个名字为Dockerfile的文件,并对项目进行clean,目的是清理环境,保证打包项目的干净,然后编写Dockerfile文件

FROM openjdk:17-jdk-slim

LABEL maintainer=rain

# 设置工作目录
WORKDIR /app

# 复制编译好的 JAR 文件到容器中
COPY target/KafkaDemo-0.0.1-SNAPSHOT.jar /app

# 暴露容器的端口,Spring Boot 默认使用 8080 端口
EXPOSE 8070

# 容器启动时运行的命令
CMD ["java", "-jar", "/app/KafkaDemo-0.0.1-SNAPSHOT.jar"]

#大家直接复制就好,但是这个KafkaDemo-0.0.1-SNAPSHOT.jar需要改成自己的项目名字
#名字的获取方法可以在pom中查看,也可以等待package后在target/目录下直接复制

3.1.3打包项目并上传到docker

在完成上一步之后进行package打包项目,等待打包完成之后,在项目的命令行输入

docker build -t my-spring-boot-app .

===================================以下是说明===============================================

docker build: 这是 Docker 命令行工具,用于构建 Docker 镜像。

-t my-spring-boot-app: 这里的 -t 选项用来给镜像指定一个标签或名称,这里是 my-spring-boot-app。标签通常用于标识和管理镜像。

.: 这个点表示 Docker 构建上下文的路径。Docker 构建上下文是构建过程中用来定位 Dockerfile 和其他构建上下文文件的路径。在这个例子中,它假设 Dockerfile 是在当前目录下。

等待命令执行完成,可能需要一定的时间,我运行的时候开了VPN才下载完成,具体的问题可以去看看本站的其他博主

3.2启动镜像项目

首先我们需要明白在docker中,容器的端口是不会与宿主机互通的,也就是你在docker中部署的项目如果没有与宿主机建立端口映射就无法正常访问服务。因此我们需要修改启动参数,在这里我推荐使用在微软中下载的Ubuntu进行启动,输入以下命令

docker run -p 8070:8070 --add-host host.docker.internal:10.161.78.114 my-spring-boot-app

===================================以下是说明===============================================

docker run: 这是 Docker 命令行工具,用于运行一个 Docker 容器。

-p 8070:8070: 这个选项指定将容器内部端口 8070 映射到主机的端口 8070。这样,外部系统可以通过主机的 8070 端口访问容器中运行的应用程序。

--add-host host.docker.internal:10.161.78.114: 这个选项允许将自定义主机名映射到指定的 IP 地址。在这里,host.docker.internal 是 Docker 容器内部访问宿主机的标准主机名,映射到 IP 地址 10.161.78.114。

my-spring-boot-app: 这是要运行的 Docker 镜像名称,即之前使用 docker build 命令构建的镜像名称。

然后等待运行结果,如果没有WARN的字样说明项目成功部署并启动,然后打开网页输入对应的端口访问即可

四.总结


可能部分细节我还没说清楚,请遇到问题的小伙伴在评论区提出自己的疑问,以便我及时看到并提供力所能及的帮助,同时也望大家指出我说错的地方,相互进步。

如果有需要源代码的小伙伴请在评论区留言,我可以上传到github上。


大家生活愉快,天天开心啊!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值