【Docker系列】容器访问宿主机的Mysql

慈云数据 2024-05-01 技术支持 71 0

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

      非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

      博客目录

        • 一.问题
        • 二.实现
          • 1.启动脚本
          • 2.参数说明

            一.问题

            在宿主机上安装了 mysql,但是没有开通公网 ip 的访问权限,如何在同一台服务器上在部署服务的时候,使用宿主机的 mysql 呢?

            在这里插入图片描述

            配置文件:

            server:
              port: 8080
            spring:
              application:
                name: DemoApp
              #  jpa:
              #    database: MYSQL
              #    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
              #    show-sql: true
              #    hibernate:
              #      ddl-auto: none
              datasource:
                url: jdbc:mysql://localhost:3306/produce_demo_test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
                username: root
                password: xxxx
                driver-class-name: com.mysql.cj.jdbc.Driver
              redis:
                host: localhost
                database: 0
                port: 6379
                password: 123456
                ssl: false
                lettuce:
                  pool:
                    max-active: 1000
                    max-wait: -1
                    max-idle: 10
                    min-idle: 5
            

            二.实现

            1.启动脚本

            #!/bin/bash
            CONTAINER_NAME=produce-demo-test
            IMAGE_NAME=produce-demo:latest
            docker rm -f ${CONTAINER_NAME}
            docker run -d  --network=host --name "${CONTAINER_NAME}" \
            --privileged=true  --env PROFILE=test  -w /home -p 8080:8080 -v "$PWD/logs:/home/logs" --restart=always "${IMAGE_NAME}"
            docker logs -f --tail 500 "${CONTAINER_NAME}"
            

            2.参数说明

            --network=host 是在 Docker 命令中指定的一个选项,它具有以下作用:

            当您在 Docker 中运行容器时,默认情况下,每个容器都会有自己的网络命名空间,这意味着容器内部和宿主机之间的网络是隔离的。容器中的应用程序可以通过 Docker 网络进行通信,但它们无法直接访问宿主机的网络。

            使用 --network=host 选项可以使容器与宿主机共享网络命名空间。这样,容器内的应用程序可以像它们直接运行在宿主机上一样访问宿主机的网络接口

            在这里插入图片描述

            具体而言,--network=host 的作用如下:

            1. 容器可以使用宿主机的 IP 地址。
            2. 容器中的应用程序可以使用宿主机上打开的端口。
            3. 容器可以直接访问宿主机上的网络设备,如网络接口卡。

            这种模式对于需要与宿主机紧密集成的应用程序非常有用,例如需要绑定宿主机上特定端口的应用程序或需要访问宿主机上的网络设备的应用程序。

            需要注意的是,使用 --network=host 选项会使容器丧失网络隔离的优势,因此需要谨慎使用,并确保对容器内部的网络安全进行适当的配置和保护。

            觉得有用的话点个赞 👍🏻 呗。

            ❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

            💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

            🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

            img

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon