docker关闭mysql端口映射的使用方式

 更新时间:2025年06月17日 09:29:40   作者:咸鱼翻身不还是咸鱼吗  
这篇文章主要介绍了docker关闭mysql端口映射的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

需求

项目中的数据库为mysql,如果将端口映射到宿主机上,容易被工具扫描出,且随着国产化的进程推进,mysql将不被允许。

为了提高安全性与满足项目需求,这里采用隐藏mysql端口方式,不映射宿主机端口,仅允许docker容器间访问。

系统部署说明

环境:

  • Centos 7
  • Docker version 24.0.6
  • Docker Compose version v2.16.0

新增docker网络

由于我们需要新建指定ip的容器,docker默认网络是随机分配ip,无法实现需求。

新建网络步骤如下

# 查看docker网卡
docker network ls 
# 查看具体信息,通常默认网卡为bridge
docker network inspect <网卡id> /<网卡NAME> 
docker network inspect bridge
# 创建网络,注意,不要和上面已经存在的网段相同
docker network create --subnet=172.18.0.0/16 myself_network

报错处理:

Error response from daemon: Pool overlaps with other one on this address space

说明172.18网段已经被使用,需要修改一个网段,比如172.36,注意后续容器中使用的所有网段需要同步修改。

数据库部署

创建/sdb/db/data目录,并下载初始化数据库脚本test.sql,进入目录,将初始化脚本放在/sdb/db/data目录下。

PS:将数据库.sql文件映射到 MySQL 容器的 /docker-entrypoint-initdb.d/ 目录下,在容器首次启动时,文件会自动执行,重启容器将不再执行当前脚本。

方法一:docker run方式启动容器

直接在/sdb/db/data目录下执行以下docker run命令,启动容器,并初始化test.sql脚本。

# 使用以上创建的网络,给容器指定一个ip
docker run --name datacenter-mysql -e MYSQL_ROOT_PASSWORD=123456   -e TZ=Asia/Shanghai --network myself_network  -v /sdb/db/data/test.sql:/docker-entrypoint-initdb.d/test.sql  -v /sdb/db/data:/var/lib/mysql  --ip 172.18.0.136  -d mysql:8.0.27 --default-authentication-plugin=mysql_native_password  --lower-case-table-names=1
# 查看容器ip
docker inspect datacenter-mysql|grep IPAddress

方法二:docker-compose方式启动

在/sdb/db/data目录下创建docker-compose.yml文件,内容如下

version: '3'

# 这里需要指定使用以上创建的网络,否则会报错
networks:
  myself_network:
    external: true

services:
  mysql-test:
    image: mysql:8.0.27
    container_name: datacenter-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - TZ=Asia/Shanghai
    volumes:
      - /sdb/db/data/test.sql:/docker-entrypoint-initdb.d/test.sql
      - /sdb/db/data:/var/lib/mysql
    command:
      - --default-authentication-plugin=mysql_native_password
      - --lower-case-table-names=1
    networks:
      my_custom_network:
        ipv4_address: 172.18.0.136
    restart: always

启动容器

docker-compose up -d

服务部署说明

配置完数据库固定ip,我们可以在服务中使用,启动容器的环境变量或配置文件都可以,docker-compose文件大致如下,具体不细展开。

version: '3.7'

networks:
  myself_network:
    external: true

services:
  web:
    image: "web:1.0"
    # 容器名
    container_name: "test-web"
    restart: always
    ports:
      - "80:80"
    networks:
      myself_network:
      # 注意:这个地址网段需要与数据库一致
        ipv4_address: 172.18.0.3

  # 启动数据中台Java服务端容器
  api:
    image: "api:1.0"
    # 容器名
    container_name: "test-api"
    restart: always
    ports:
      - "8080:8080"
    environment: 
    # 这里可以设置环境变量,使用以上配置的mysql数据库ip端口
      DB_JDBC_URL: jdbc:mysql://127.18.0.136:3306/test
      DB_USERNAME: root
      DB_PASSWORD: 123456
    networks:
      myself_network:
       # 注意:这个地址网段需要与数据库一致
        ipv4_address: 172.18.0.4

启动服务

docker-compose up -d

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Windows Docker端口占用错误及解决方案总结

    Windows Docker端口占用错误及解决方案总结

    在 Windows 环境下使用 Docker 容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配,合理调整动态端口范围,以及重启网络服务等实用技巧,有效解决 Windows Docker 端口占用错误,需要的朋友可以参考下
    2025-04-04
  • 导出与导入Docker的容器实现示例

    导出与导入Docker的容器实现示例

    本文主要介绍了导出与导入Docker的容器实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • docker redis5.0 cluster集群搭建的实现

    docker redis5.0 cluster集群搭建的实现

    这篇文章主要介绍了docker redis5.0 cluster集群搭建的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 使用Docker Compose部署Dify的方法

    使用Docker Compose部署Dify的方法

    这篇文章主要介绍了使用Docker Compose部署Dify的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • 通过Docker部署Redis 6.x集群的方法

    通过Docker部署Redis 6.x集群的方法

    这篇文章主要介绍了通过Docker部署Redis 6.x集群的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 在Idea中使用Docker部署SpringBoot项目的详细步骤

    在Idea中使用Docker部署SpringBoot项目的详细步骤

    这篇文章主要介绍了在Idea中使用Docker部署SpringBoot项目的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Docker制作MySQL镜像并使用`/docker-entrypoint-initdb.d/`问题

    Docker制作MySQL镜像并使用`/docker-entrypoint-initdb.d/`问题

    这篇文章主要介绍了Docker制作MySQL镜像并使用`/docker-entrypoint-initdb.d/`问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • docker保存和加载tar及其tar.gz方式

    docker保存和加载tar及其tar.gz方式

    这篇文章主要介绍了docker保存和加载tar及其tar.gz方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • docker-registry私有仓库镜像之查看与删除实现方式

    docker-registry私有仓库镜像之查看与删除实现方式

    文章主要介绍了如何查看、删除私有仓库中的镜像以及获取镜像的hash值,通过使用`curl`命令和Python格式化json,可以方便地查看镜像和tag列表,删除镜像时需要确认功能是否开启,并且通过重启registry容器使修改生效
    2025-12-12
  • docker清理中断构建后产生的镜像和缓存(实际操作)

    docker清理中断构建后产生的镜像和缓存(实际操作)

    Ctrl+C中断构建后,Docker会残留中间层镜像和缓存,清理方法包括删除构建缓存(docker build prune)、移除无标签镜像(docker image prune)、彻底清理(docker system prune -a)及检查空间占用,建议根据需求选择,避免误删,感兴趣的朋友跟随小编一起看看吧
    2025-09-09

最新评论