最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker容器連接宿主機(jī)redis與mysql的配置方法

 更新時(shí)間:2023年06月21日 09:31:29   作者:山有木兮丶丶  
最近有朋友在工作時(shí)遇到一個(gè)問題,docker容器無法訪問宿主機(jī)的redis,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于docker容器連接宿主機(jī)redis與mysql的配置方法,需要的朋友可以參考下

前言

當(dāng)我們?cè)谟胐ocker部署項(xiàng)目的時(shí)候可能會(huì)遇到這樣一個(gè)問題:項(xiàng)目A和項(xiàng)目B都用到了redis和mysql,如果在docker-compose里link或者dependon一個(gè)redis和mysql的話,會(huì)發(fā)現(xiàn)每一個(gè)項(xiàng)目都有一個(gè)redis和mysql,這樣如果項(xiàng)目多了也會(huì)產(chǎn)生很多的redis和mysql,看著挺不爽而且也浪費(fèi)資源的,那能不能讓這些項(xiàng)目都能連同一個(gè)redis和mysql呢?

當(dāng)然是可以了,我們可以利用docker的自定義網(wǎng)絡(luò)實(shí)現(xiàn),或者將redis和mysql裝在宿主機(jī)上,所有的項(xiàng)目都連接宿主機(jī)的redis和mysql。

這里介紹的是第二種方法:將redis和mysql裝在宿主機(jī)上

看起來挺簡(jiǎn)單,只要在項(xiàng)目的配置文件里把連接redis和mysql的地址改成localhost就行了,但是這樣改部署完之后卻發(fā)現(xiàn)報(bào)錯(cuò)了,連接不上,這是因?yàn)椴荒芡ㄟ^localhost在docker容器里面連接宿主機(jī),接下來就需要做一點(diǎn)小小的配置了。

一、連接redis

1、在宿主機(jī)中輸入以下命令:

ifconfig

然后找到docker0這一行下面的inet 172.17.0.1,這個(gè)就是docker虛擬網(wǎng)卡的ip,通過這個(gè)ip,我們就可以在容器中連接宿主機(jī)了。

[root@VM-8-8-centos ~]# ifconfig
br-ffb2f3de993a: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        inet6 fe80::42:e9ff:fecd:eb0b  prefixlen 64  scopeid 0x20<link>
        ether 02:42:e9:cd:eb:0b  txqueuelen 0  (Ethernet)
        RX packets 32  bytes 2489 (2.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 2582 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:c1ff:fedc:e526  prefixlen 64  scopeid 0x20<link>
        ether 02:42:c1:dc:e5:26  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 266 (266.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、找到redis的配置文件redis.conf,找到bind 127.0.0.1這一行,修改如下

bind 127.0.0.1 172.17.0.1

再找到# requirepass foobared 這行,取消注釋,并自行配置密碼,然后重啟redis

3、最后在項(xiàng)目中將連接redis的ip改成上面的172.17.0.1,并加上密碼即可

二、連接mysql

MySQL的跟Redis的就稍微有些不一樣了,Redis主要是對(duì)配文件進(jìn)行操作,而MySQL是要對(duì)表操作。

1、首先啟動(dòng)項(xiàng)目的容器,然后獲取ip

docker exec -it 容器id ip addr

然后找到eth0@if36開頭的這一行,下面的inet后的ip就是docker給容器的一個(gè)ip,我這里的是172.18.0.2

[root@VM-8-8-centos ~]# docker exec -it 8337cd4ab0a1 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
35: eth0@if36: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever

2、登錄MySQL

# 一定要用root賬號(hào)
mysql -uroot -p密碼
# 指定數(shù)據(jù)庫
use mysql;

3、創(chuàng)建賬號(hào)并指定權(quán)限

# 這個(gè)命令的作用是:創(chuàng)建一個(gè)賬號(hào)symx,密碼12345678的用戶,指定只能由172.18.0.2的ip連接
CREATE user `symx`@'172.18.0.2' IDENTIFIED WITH mysql_native_password by '12345678';
# 這個(gè)命令的作用是:指定用戶symx,ip為172.18.0.2,該用戶可以對(duì)任意數(shù)據(jù)庫的任意表
# 進(jìn)行SELECT,INSERT,UPDATE,DELETE,CREATE,DROP操作,*.*的意思是:第一個(gè)*是數(shù)據(jù)庫,
# 可以指定哪個(gè)數(shù)據(jù)庫,*表示全部數(shù)據(jù)庫;第二個(gè)*為表,可以指定是哪個(gè)表,*表示全部表
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on *.* TO `symx`@'172.18.0.2';
#當(dāng)然也可以給予賬號(hào)全部權(quán)限,下面和上面的命令只能選擇一個(gè),看個(gè)人的情況
GRANT ALL PRIVILEGES on *.* TO `symx`@`172.18.0.2`;
# 刷新
FLUSH PRIVILEGES;
# 執(zhí)行上面的命令可能會(huì)出現(xiàn)
# ERROR 1410 (42000): You are not allowed to create a user with GRANT的錯(cuò)誤,
# 這時(shí)可以執(zhí)行下面的命令,給予權(quán)限
GRANT system_user ON *.* TO 'root';
FLUSH PRIVILEGES;

4、以上都執(zhí)行成功后,就可以通過賬號(hào)symx,密碼12345678來連接數(shù)據(jù)庫了

需要注意的是:連接數(shù)據(jù)庫的ip為ifconfig的docker0的ip:172.17.0.1,而不是上面的容器里的ip。

三、tips

或許我們會(huì)有這樣一個(gè)疑問:為什么redis的配置文件里bind的是docker0的ip:172.17.0.1,而在mysql里的卻是docker容器的ip:172.18.0.2呢?

這是因?yàn)閞edis和mysql它們的策略不同。

首先講MySQL的策略,MySQL的策略就比較簡(jiǎn)單,在上面我們通過增加一個(gè)記錄在user表中指定了host和user這兩個(gè)字段,分別是ip和用戶名,即表示該賬號(hào)可以通過這個(gè)ip訪問到mysql,這個(gè)ip指的是請(qǐng)求方的ip,而請(qǐng)求方的ip也就是docker容器內(nèi)的ip,即通過docker exec -it 容器id ip addr命令獲取到的ip。

而Redis就不一樣了,redis里的bind的意思是綁定本機(jī)的ip,準(zhǔn)確的說是綁定本機(jī)的網(wǎng)卡對(duì)應(yīng)的ip地址,每個(gè)服務(wù)器都有多個(gè)網(wǎng)卡,每個(gè)網(wǎng)卡都有一個(gè)ip地址。網(wǎng)卡的ip地址,可以通過ifconfig命令查詢到,上面的172.17.0.1就是docker的網(wǎng)卡地址,所以bing:172.17.0.1意思是只允許來自docker這個(gè)網(wǎng)卡的請(qǐng)求,而不是說只有請(qǐng)求方的ip為172.17.0.1才能訪問。

在修改配置文件的時(shí)候,我們可以看到有一個(gè)配置是bind:127.0.0.1,這個(gè)綁定的是lo網(wǎng)卡的ip地址,也就是ifconfig命令下的lo那個(gè)地址,稱之為回環(huán)地址(Local Loopback),只有本地才能連接,默認(rèn)的配置文件只有這一個(gè)配置,所以做到了只有本地才能連接redis。

當(dāng)沒有指定bind的時(shí)候,則表示所有的ip都能訪問到redis,通常不要這樣做,有很大幾率會(huì)被攻擊。

如果想限制只有指定的ip可以訪問的話,還能通過防火墻來控制了,是不能通過redis的bind來限制的。

總結(jié)

到此這篇關(guān)于docker容器連接宿主機(jī)redis與mysql的文章就介紹到這了,更多相關(guān)docker連接宿主機(jī)redis與mysql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS安裝Docker的方法

    CentOS安裝Docker的方法

    這篇文章介紹了CentOS安裝Docker的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Docker部署RocketMQ超詳細(xì)步驟(圖文并茂)

    Docker部署RocketMQ超詳細(xì)步驟(圖文并茂)

    RocketMQ?是一款開源的分布式消息隊(duì)列系統(tǒng),具有低延遲、高并發(fā)、高可用等特性,這篇文章主要介紹了Docker部署RocketMQ超詳細(xì)步驟的相關(guān)資料,通過這些步驟,用戶可以成功搭建一個(gè)RocketMQ集群,并通過控制臺(tái)進(jìn)行管理和監(jiān)控,需要的朋友可以參考下
    2025-04-04
  • Docker/DockerSwarm部署LNMP并平滑升級(jí)PHP過程

    Docker/DockerSwarm部署LNMP并平滑升級(jí)PHP過程

    本文詳細(xì)介紹了如何在CentOS上配置Docker環(huán)境、部署LNMP(Linux, Nginx, MySQL, PHP)服務(wù),并通過Docker Swarm實(shí)現(xiàn)PHP版本的平滑升級(jí),文章還涵蓋了配置內(nèi)核轉(zhuǎn)發(fā)、安裝Docker、配置鏡像倉(cāng)庫、拉取鏡像、部署容器、連接容器、解決常見問題、升級(jí)應(yīng)用以及回滾測(cè)試等內(nèi)容
    2025-10-10
  • docker部署minio并使用springboot連接的操作方法

    docker部署minio并使用springboot連接的操作方法

    這篇文章主要介紹了docker部署minio并使用springboot連接的操作方法,本文以minio為例結(jié)合實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-11-11
  • 使用Docker搭建minio的詳細(xì)圖文教程

    使用Docker搭建minio的詳細(xì)圖文教程

    本文介紹了Docker配置鏡像源的方法,以及如何在Docker中拉取鏡像和創(chuàng)建運(yùn)行容器,詳細(xì)說明了使用MinIO創(chuàng)建Bucket、設(shè)置AccessKey、安裝和配置Cpolar以及SpringBoot集成MinIO的步驟,需要的朋友可以參考下
    2024-10-10
  • 一文詳解如何在Ubuntu系統(tǒng)中安裝docker

    一文詳解如何在Ubuntu系統(tǒng)中安裝docker

    這篇文章主要為大家詳細(xì)介紹了在Ubuntu操作系統(tǒng)上安裝Docker的步驟,以便我們可以開始使用Docker來構(gòu)建和運(yùn)行容器化應(yīng)用程序,希望對(duì)大家有所幫助
    2024-03-03
  • docker daemon遠(yuǎn)程連接設(shè)置詳解

    docker daemon遠(yuǎn)程連接設(shè)置詳解

    本篇文章主要介紹了docker daemon遠(yuǎn)程連接設(shè)置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Docker鏡像拉取、制作與上傳的完整指南

    Docker鏡像拉取、制作與上傳的完整指南

    本文文章主要介紹了Docker鏡像的核心概念、實(shí)用示例以及最佳實(shí)踐,從基礎(chǔ)的鏡像拉取、制作到高級(jí)ocker安全加固、性能優(yōu)化和自動(dòng)化部署,全方位講解了Java應(yīng)用在Docker中的實(shí)戰(zhàn)應(yīng)用,并并給出了具體的操作示例和建議,需要的朋友可以參考下
    2026-04-04
  • Docker 教程之鏡像創(chuàng)建及修改詳細(xì)介紹

    Docker 教程之鏡像創(chuàng)建及修改詳細(xì)介紹

    這篇文章主要介紹了Docker 教程之鏡像創(chuàng)建及修改詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • docker搭建minio及java sdk使用過程詳解

    docker搭建minio及java sdk使用過程詳解

    MinIO 是一款高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng). 它是一款軟件產(chǎn)品, 可以100%的運(yùn)行在標(biāo)準(zhǔn)硬件,MinIO使用也非常受歡迎,很多朋友不知道m(xù)inio如何搭建及java sdk的使用,今天借這篇文章給大家詳細(xì)介紹下,需要的朋友參考下吧
    2021-09-09

最新評(píng)論

炉霍县| 美姑县| 邛崃市| 杭锦后旗| 清苑县| 晋城| 安乡县| 宁德市| 长春市| 修文县| 宽城| 建始县| 增城市| 双柏县| 哈密市| 武定县| 体育| 应城市| 平定县| 玉田县| 山东省| 安义县| 罗定市| 盐源县| 长岛县| 万全县| 黑水县| 五常市| 布尔津县| 晋中市| 甘洛县| 上高县| 论坛| 新竹县| 聂荣县| 甘孜县| 唐河县| 林甸县| 新巴尔虎右旗| 依安县| 周宁县|