欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

看起來挺簡單,只要在項目的配置文件里把連接redis和mysql的地址改成localhost就行了,但是這樣改部署完之后卻發(fā)現(xiàn)報錯了,連接不上,這是因為不能通過localhost在docker容器里面連接宿主機,接下來就需要做一點小小的配置了。

一、連接redis

1、在宿主機中輸入以下命令:

ifconfig

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

[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、最后在項目中將連接redis的ip改成上面的172.17.0.1,并加上密碼即可

二、連接mysql

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

1、首先啟動項目的容器,然后獲取ip

docker exec -it 容器id ip addr

然后找到eth0@if36開頭的這一行,下面的inet后的ip就是docker給容器的一個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賬號
mysql -uroot -p密碼
# 指定數(shù)據(jù)庫
use mysql;

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

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

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

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

三、tips

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

這是因為redis和mysql它們的策略不同。

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • docker-compose 部署 Apollo 自定義環(huán)境的詳細教程

    docker-compose 部署 Apollo 自定義環(huán)境的詳細教程

    本篇文章給大家介紹docker-compose 部署 Apollo 自定義環(huán)境的詳細教程,而其中Config Service提供配置的讀取、推送等功能,服務對象是Apollo客戶端,對docker部署Apollo環(huán)境相關(guān)知識感興趣的朋友一起看看吧
    2021-06-06
  • 不使用sudo 執(zhí)行Docker命令的方法

    不使用sudo 執(zhí)行Docker命令的方法

    本篇文章主要介紹了不使用sudo 執(zhí)行Docker命令的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • docker-compose啟動minio方式

    docker-compose啟動minio方式

    文章介紹了創(chuàng)建文件夾、配置docker-compose.yml、開啟防火墻以及驗證服務的步驟,適用于新版和老版的RELEASE數(shù)據(jù)格式
    2025-01-01
  • Docker容器沒有權(quán)限寫入宿主機目錄的解決方案

    Docker容器沒有權(quán)限寫入宿主機目錄的解決方案

    這篇文章主要介紹了Docker容器沒有權(quán)限寫入宿主機目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據(jù)庫的解決方案

    Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據(jù)庫的解決方案

    這篇文章主要介紹了Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據(jù)庫的解決方案,重點給大家介紹如何把shell/sql腳本放入/docker-entrypoint-initdb.d/目錄中,讓容器啟動的時候自動執(zhí)行創(chuàng)建
    2021-06-06
  • docker搭建Mycat實現(xiàn)讀寫分離的項目實踐

    docker搭建Mycat實現(xiàn)讀寫分離的項目實踐

    本文主要介紹了docker搭建Mycat實現(xiàn)讀寫分離的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 超詳細Docker Desktop下安裝rocketmq的教程

    超詳細Docker Desktop下安裝rocketmq的教程

    這篇文章主要介紹了Docker Desktop下安裝rocketmq,本文內(nèi)容通過圖文操作命令給大家講解的非常詳細,需要的朋友可以參考下
    2021-10-10
  • Docker開放2375端口實現(xiàn)遠程訪問的操作方法

    Docker開放2375端口實現(xiàn)遠程訪問的操作方法

    因為IDEA集成docker環(huán)境,實質(zhì)上是通過遠程訪問的形式,進行連接,因此需要開啟Docker的2375端口的遠程訪問權(quán)限,這篇文章主要介紹了Docker開放2375端口實現(xiàn)遠程訪問的操作方法,需要的朋友可以參考下
    2024-05-05
  • skywalking agent 關(guān)聯(lián)docker鏡像的多種方法

    skywalking agent 關(guān)聯(lián)docker鏡像的多種方法

    Apache SkyWalking 提供了多種方式來部署和使用 SkyWalking Agent,包括在 Docker 容器中運行的應用,本文給大家分享幾種方式將 SkyWalking Agent 集成到你的 Docker 應用中,感興趣的朋友一起看看吧
    2025-04-04
  • 利用Docker制作Nginx+PHP鏡像的步驟詳解

    利用Docker制作Nginx+PHP鏡像的步驟詳解

    Nginx是一個高性能的Web和反向代理服務器,它具有很多非常優(yōu)越的特性,那么這篇文章小編就分步驟向大家介紹如何利用Docker制作Nginx+PHP的鏡像,文章介紹的很詳細,對大家具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-10-10

最新評論