Docker容器連接外部Mysql的幾種方案
前言
在Linux Centos上面部署Docker容器,并且將原來(lái)的項(xiàng)目服務(wù)放到docker的某個(gè)鏡像中,啟動(dòng)服務(wù)號(hào)發(fā)現(xiàn)無(wú)法連接到容器所在宿主機(jī)的mysql數(shù)據(jù)庫(kù),但是現(xiàn)在項(xiàng)目服務(wù)需要連接mysql數(shù)據(jù)庫(kù)。
例如:SQLalchemy
# 初始化數(shù)據(jù)庫(kù)連接: TODO 參數(shù)化
engine = create_engine(
f'mysql+mysqlconnector://{DB_USERNAME}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}')
# 創(chuàng)建DBSession類型:
DBSession = sessionmaker(bind=engine)
# 創(chuàng)建session對(duì)象:
session = DBSession()但是在容器中項(xiàng)目localhost默認(rèn)的是docker容器這個(gè)虛擬主機(jī)的ip,而我在docker該鏡像容器中上面并沒(méi)有安裝mysql服務(wù),
方案一:
使用宿主機(jī)的ip地址,docker有自己的ip,宿主機(jī)所在的Centos服務(wù)器也有自己的ip,如果把項(xiàng)目訪問(wèn)IP改為宿主機(jī)的ip。
輸入ifconfig

替換上面的項(xiàng)目中訪問(wèn)mysql的地址即 localhost 替換好了之后啟動(dòng)容器。這是土辦法,但遇到ip變動(dòng)的window就不太可行。
方案二:
在docker配置文件yml中設(shè)置參數(shù)command
docker-compose.yml
version: '3'
services:
mysql:
restart: always
image: mysql:5.7
container_name: mysql
command: --default-authentication-plugin=mysql_native_password #解決外部無(wú)法訪問(wèn)
volumes:
- ./mydir:/mydir
- ./datadir:/var/lib/mysql
- ./conf/my.cnf:/etc/my.cnf
# 數(shù)據(jù)庫(kù)還原目錄 可將需要還原的sql文件放在這里
- /docker/mysql/source:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=password
- TZ=Asia/Shanghai
ports:
- 3306:3306方案三:
如果mysql是非docker容器化部署,可以進(jìn)行掛載外部mysql
docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
配置my.cnf信息
[mysqld] # 服務(wù)端字符集 character-set-server=utf8 collation_server = utf8_general_ci [client] # 客戶端字符集 default-character-set=utf8
另有網(wǎng)友提供
找到my.cnf配置文件
注釋掉 bind-address = 127.0.0.1,
重啟mysql
總結(jié)
到此這篇關(guān)于Docker容器連接外部Mysql的幾種方案的文章就介紹到這了,更多相關(guān)Docker容器連接外部Mysql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
不重啟Docker容器就能修改時(shí)間的全方案總結(jié)
在使用Docker的過(guò)程中,很多開(kāi)發(fā)者會(huì)遇到需要修改容器時(shí)間的場(chǎng)景,本文會(huì)梳理Docker容器時(shí)間的底層邏輯,以及不重啟容器修改時(shí)間的所有可行方案,大家可以根據(jù)需要進(jìn)行選擇2025-12-12
解決Docker Desktop運(yùn)行一直轉(zhuǎn)問(wèn)題
遇到Docker啟動(dòng)報(bào)錯(cuò)、Docker Desktop運(yùn)行不正常等問(wèn)題,常見(jiàn)解決方案包括以管理員身份運(yùn)行CMD,重啟Docker服務(wù),恢復(fù)Docker Desktop出廠設(shè)置,啟用Windows功能等,最終通過(guò)運(yùn)行cmd命令"netsh winsock reset"解決問(wèn)題,但需注意此操作可能導(dǎo)致Docker鏡像丟失2024-09-09
使用 Docker 部署 Apache Spark 集群的過(guò)程
本文介紹了如何使用Docker和DockerCompose快速部署一個(gè)包含一個(gè)Master節(jié)點(diǎn)和兩個(gè)Worker節(jié)點(diǎn)的Spark集群,通過(guò)創(chuàng)建docker-compose.yml文件并執(zhí)行相關(guān)命令,可以實(shí)現(xiàn)集群的構(gòu)建和啟動(dòng),感興趣的朋友一起看看吧2025-02-02
docker-compose教程之安裝使用和快速入門(mén)
這篇文章主要介紹了docker-compose教程之安裝使用和快速入門(mén),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

