docker關閉mysql端口映射的使用方式
需求
項目中的數(shù)據(jù)庫為mysql,如果將端口映射到宿主機上,容易被工具掃描出,且隨著國產(chǎn)化的進程推進,mysql將不被允許。
為了提高安全性與滿足項目需求,這里采用隱藏mysql端口方式,不映射宿主機端口,僅允許docker容器間訪問。
系統(tǒng)部署說明
環(huán)境:
- Centos 7
- Docker version 24.0.6
- Docker Compose version v2.16.0
新增docker網(wǎng)絡
由于我們需要新建指定ip的容器,docker默認網(wǎng)絡是隨機分配ip,無法實現(xiàn)需求。
新建網(wǎng)絡步驟如下
# 查看docker網(wǎng)卡 docker network ls # 查看具體信息,通常默認網(wǎng)卡為bridge docker network inspect <網(wǎng)卡id> /<網(wǎng)卡NAME> docker network inspect bridge # 創(chuàng)建網(wǎng)絡,注意,不要和上面已經(jīng)存在的網(wǎng)段相同 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網(wǎng)段已經(jīng)被使用,需要修改一個網(wǎng)段,比如172.36,注意后續(xù)容器中使用的所有網(wǎng)段需要同步修改。
數(shù)據(jù)庫部署
創(chuàng)建/sdb/db/data目錄,并下載初始化數(shù)據(jù)庫腳本test.sql,進入目錄,將初始化腳本放在/sdb/db/data目錄下。
PS:將數(shù)據(jù)庫.sql文件映射到 MySQL 容器的 /docker-entrypoint-initdb.d/ 目錄下,在容器首次啟動時,文件會自動執(zhí)行,重啟容器將不再執(zhí)行當前腳本。
方法一:docker run方式啟動容器
直接在/sdb/db/data目錄下執(zhí)行以下docker run命令,啟動容器,并初始化test.sql腳本。
# 使用以上創(chuàng)建的網(wǎng)絡,給容器指定一個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目錄下創(chuàng)建docker-compose.yml文件,內(nèi)容如下
version: '3'
# 這里需要指定使用以上創(chuàng)建的網(wǎng)絡,否則會報錯
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
服務部署說明
配置完數(shù)據(jù)庫固定ip,我們可以在服務中使用,啟動容器的環(huán)境變量或配置文件都可以,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:
# 注意:這個地址網(wǎng)段需要與數(shù)據(jù)庫一致
ipv4_address: 172.18.0.3
# 啟動數(shù)據(jù)中臺Java服務端容器
api:
image: "api:1.0"
# 容器名
container_name: "test-api"
restart: always
ports:
- "8080:8080"
environment:
# 這里可以設置環(huán)境變量,使用以上配置的mysql數(shù)據(jù)庫ip端口
DB_JDBC_URL: jdbc:mysql://127.18.0.136:3306/test
DB_USERNAME: root
DB_PASSWORD: 123456
networks:
myself_network:
# 注意:這個地址網(wǎng)段需要與數(shù)據(jù)庫一致
ipv4_address: 172.18.0.4啟動服務
docker-compose up -d
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
docker容器狀態(tài)轉(zhuǎn)換管理命令實例詳解
Docker容器只是一個運行于宿主操作系統(tǒng)host?OS上的應用進程,所以你需要一個鏡像來運行它,Docker鏡像以進程的方式運行時就叫做Docker容器,這篇文章主要給大家介紹了關于docker容器狀態(tài)轉(zhuǎn)換管理命令的相關資料,需要的朋友可以參考下2022-05-05
完美解決Windows下Docker Desktop 啟動失敗:從虛擬化報錯到成功運行的全流程
文章詳細介紹了在Windows上啟動Docker Desktop時遇到「Virtualization support not detected」和500內(nèi)部服務器錯誤的解決過程,涵蓋了硬件層面和軟件層面的排查和解決方法,感興趣的朋友跟隨小編一起看看吧2026-03-03
docker swarm集群搭建過程對比k8s區(qū)別解析
Docker Swarm和Kubernetes是兩種流行的容器編排工具,它們在服務部署、高可用性、滾動更新、資源管理和存儲編排方面有所不同,本文給大家介紹docker swarm集群搭建過程對比k8s區(qū)別解析,感興趣的朋友一起看看吧2025-11-11
Docker?發(fā)布自定義鏡像到公共倉庫的方法實現(xiàn)
在本文我們將學習如何使用Docker從公共倉庫拉取Nginx鏡像,定制該鏡像,添加自定義配置文件,并將定制后的鏡像發(fā)布到公共倉庫,同時指定自定義的名稱、描述和版本號,感興趣的可以了解一下2024-01-01
使用Docker部署Neko自托管虛擬瀏覽器(Firefox)的流程
本文介紹了基于WebRTC的自托管虛擬瀏覽器環(huán)境Neko的部署方法,包括使用Docker和Docker Compose部署、基本配置、使用方法及注意事項等內(nèi)容,適合團隊協(xié)作、遠程演示等場景,需要的朋友可以參考下2026-04-04

