记 Docker 运行公共 MySQL 数据库供其他服务使用的配置过程

news/2025/12/9 2:07:02/文章来源:https://www.cnblogs.com/yan-si/p/19324126

在 VPS 上部署服务时,使用 Docker 或 Docker Compose 是最方便的方式之一。例如博客系统Typecho和短链接服务Shlink都要求外部数据库,如果在每个服务的 Docker Compose 中都各自启动一个 MySQL,既浪费空间,维护也更复杂。

更理想的情况是:单独运行一个公共 MySQL 容器,让所有需要数据库的服务连接到它。这样不仅节省资源,备份时也只需备份一个数据库容器即可,大大降低维护成本。

笔者以MySQL服务为例,先运行一个公共的数据库服务,并让其他容器共享使用。


1. 启动公共 MySQL 服务

以下是 MySQL 服务的 docker-compose.yml 示例

version: '3.8'services:mysql:container_name: mysqlimage: mysql:8.0restart: alwaysports:- 127.0.0.1:3306:3306environment:MYSQL_ROOT_PASSWORD: 1234567890volumes:- ./data/mysql:/var/lib/mysqlnetworks:- shared-mysqlnetworks:shared-mysql:name: shared-mysql

其中关键点是:

  • 为 MySQL 单独创建 shared-mysql 网络,方便其他服务加入该网络并访问数据库
  • 端口映射使用 127.0.0.1:3306,避免外部访问
  • 数据持久化到 ./data/mysql

执行 docker compose up -d 启动 MySQL服务。


2. 为其他应用创建独立的数据库与用户

为了安全与隔离,每个应用都应有独立的数据库与用户。以 Shlink 为例,步骤如下:

  1. 进入 MySQL 容器

    docker exec -it mysql bash
    mysql -uroot -p
    #(输入 root 密码)
    
  2. 创建数据库与用户

    CREATE DATABASE shlink;
    CREATE USER 'shlink_user'@'%' IDENTIFIED BY 'shlink';
    GRANT ALL PRIVILEGES ON shlink.* TO 'shlink_user'@'%';
    FLUSH PRIVILEGES;
    
    • 创建数据库 shlink
    • 创建用户 shlink_user,密码为 shlink
    • 为用户 shlink_user 在数据库 shlink 上授权
    • 最后退出 exit

这样就在数据库中建立起 shlink 表及用户供后续服务使用。


3. 在服务的Docker Compose中配置数据库环境变量

以笔者的 Shlink 短链接服务为例,需要在 Compose 文件中写入如下内容:

version: '3.8'services:shlink:image: shlinkio/shlink:stablecontainer_name: shlinkports:- '127.0.0.1:8080:8080'environment:- DEFAULT_DOMAIN=shlink.test.com- IS_HTTPS_ENABLED=true- GEOLITE_LICENSE_KEY=123321123321- INITIAL_API_KEY=123321- REDIRECT_STATUS_CODE=301- DB_DRIVER=mysql- DB_HOST=mysql- DB_PORT=3306- DB_USER=shlink_user- DB_PASSWORD=shlink- DB_NAME=shlinkrestart: alwaysnetworks:- shared-mysqlshlink-web-client:image: shlinkio/shlink-web-client:stablecontainer_name: shlink-web-clientports:- '127.0.0.1:8081:8080'restart: alwaysnetworks:shared-mysql:external: true

从中看到,有几个关键点:

  1. 对于需要数据库的后端服务,要加入networks: - shared-mysql ,让后端和数据库服务在同一个网络下
  2. 数据库服务的HOST直接写容器的服务名称,也就是DB_HOST=mysql
  3. 最后的networks 也需要写明external: true
  4. 其他数据库配置(库名、用户、密码)与前一步创建的保持一致即可

这样就 Shlink 就能成功连接公共 MySQL 数据库。


参考文献

[1] Docker 安装 Shlink 自建短网址. https://u.sb/docker-shlink/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/993844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记Docker运行公共MySQL数据库供其他服务使用

在 VPS 上部署服务时,使用 Docker 或 Docker Compose 是最方便的方式之一。例如博客系统Typecho和短链接服务Shlink都要求外部数据库,如果在每个服务的 Docker Compose 中都各自启动一个 MySQL,既浪费空间,维护也更…

手竿新手买什么品牌好?新手买鱼竿品牌推荐:鱼竿新手入门推荐

不少钓鱼新手一进渔具店就头大,“调性”“碳布吨位”“钓重”这些词跟天书似的,越听越懵。其实新手挑鱼竿特简单,抓住好操控、够耐用、用着爽这三点就行,至于手竿新手买啥品牌,答案就藏在产品参数和你常去的钓点里…

2025年中国鱼竿十大名单 国产良心钓鱼竿品牌排行榜全解析

垂钓作为一项兼具休闲与竞技属性的活动,鱼竿的品质直接影响着垂钓体验。随着钓具制造技术的不断发展,市场上涌现出众多专注于鱼竿生产的品牌,它们在材料研发、工艺创新和服务保障等方面各有特色,为不同需求的钓友提…

2025年台钓竿品牌排行榜前十,中国质量好的手竿盘点

台钓竿特指适应台湾钓鱼技法的专用钓竿,具有调性精准、手感轻盈等特点,是淡水垂钓的主流装备。手竿则是无绕线轮钓竿的统称,台钓竿正是手竿中技术含量较高的品类。而“质量好”的核心评判点则集中在强度、轻量化、耐…

2025高碳素超轻超硬鱼竿哪家好?高碳素超轻超硬鱼竿推荐

随着垂钓运动成为大众休闲生活的重要组成,“高碳素超轻超硬鱼竿推荐”“高碳素超轻超硬鱼竿哪家好”等问题持续升温,这些长尾词的背后,是钓友对装备性能升级的迫切需求。在2025年的渔具市场中,高碳素鱼竿已成为主流…

STM32设置为I2C从机模式(HAL库版本)转

1、初始化I2C配置注:除了最后的HAL_I2C_EnableListen_IT()函数,其他代码都可以用STM32CubeMX自动生成参考代码:1 static void MX_I2C1_Init(void)2 {3 hi2c1.Instance = I2C1; //…

手竿什么品牌质量好?选购指南:中国手竿十大品牌,公认好用的手竿

手竿作为淡水垂钓的核心装备,其质量好坏直接决定垂钓体验。判断一款手竿是否优质,关键看材质、调性、钓重、工艺四大维度。材质上,30-40T碳布是性价比黄金区间,过高的T数易导致竿体过脆,反而不适合野钓;调性方面…

STM32设置为I2C从机模式(转)

测试例程:定义一个256字节的buffer用来存放I2C从机的数据,默认赋初值0-255,然后通过中断的方式实现I2C数据读写。示例代码如下:1 #include "stm32f10x.h"2 #include "stm32f10x_gpio.h"3 #inc…

Linux Mint在更新内核后出现网卡未识别的问题

Linux Mint在更新内核后出现网卡未识别的问题前段时间在U盘中安装了一个Linux Mint,但后来因为更新了一下内核版本导致无线网卡无法识别(network UNCLAIMED),问了deepseek和chatgpt后(进入Live模式给新内核的Linu…

jittor和torch的爱恨情仇

左jittor右torch execute --- forward concat --- cat zeros_like --- empty_like jt.array --- torch.tensor greater --- gt 需要注意的 unique在 Jittor 中只有 return_inverse=True 时 return_counts=True 才有效…

FeatherNotes

https://github.com/tsujan/FeatherNotes

XHORSE XSGA80EN Universal Smart Key 5pcs/lot – Ideal for European American Car Owners Mechanics

Solving the Smart Key Replacement Headache: Introducing the XHORSE XSGA80EN Universal Smart Key Problem: The High Cost and Compatibility Nightmare of Smart Key Replacement For European and American car…

P1036 选数

点击查看代码 #include<bits/stdc++.h> using namespace std;int n,m; int a[25]; long long ans;bool prime(int x) {if(x==1||x!=2&&x%2==0) return false;for(int i=3;i<=x/i;i++) if(x%i==0) ret…

GIT-01 Fuel Injection Drivebox Injector Tester: Universal Plugs for All Injectors + Frequency Lock

The Pain of Fuel Injector Diagnostics: A Common Challenge for Mechanics and Car Owners Fuel injectors are the heart of modern engines, responsible for delivering precise fuel to combustion chambers. Wh…

虚拟机 VMware Tools 工具安装失败/缺失的问题

开源的VMware Tools工具下载方法 VMware Tools 有多种获取方式,以下是主要方法: 1. 通过 VMware 产品直接安装(推荐) 这是最简单的方法,在安装 VMware 虚拟机时:自动安装:VMware Workstation/Fusion 在新建虚拟…

AgileConfig-1.11.0 发布:增强的权限管理

AgileConfig 作为一个轻量级配置中心,我一直强调其“轻量”的概念。因此,权限管理这一块一直比较薄弱,甚至可以说形同虚设。然而,在实际项目实施中,用户对于权限管理的需求非常强烈,因为某些配置(如数据库连接串…

Windows 10 终止服务,趁微软官方下载通道还没有关闭,现在教大家如何用电脑浏览器下载。

微软下载通道虽然还在,但是桌面浏览器访问,默认是看不到的。但是使用手机浏览器还是可以看的到的。https://www.microsoft.com/zh-cn/software-download/windows10   那么第一种方式:可以使用手机浏览器访问上面链…

CSAPP 存储器层次结构

CSAPP 存储器层次结构目录存储器层次结构存储技术RAMDRAM的读写内存模块ROM主存的访问磁盘的存储磁盘的构造磁盘的存储磁盘的读写逻辑磁盘块 存储器层次结构 存储器系统是一个具有不同容量,成本和访问时间的存储设备的…

WPS免费版(会员功能永久可用)

WPS免费版(会员功能永久可用)WPS电信内部版是一款针对特定部门定制的办公软件版本,内置了永不到期的授权码,实现永久免费使用,无需订阅即可解锁完整功能该版本在兼容性、功能性和部署效率上均有显著优化,以下是其…

P1030 求先序序列

点击查看代码 #include<bits/stdc++.h> using namespace std;string in,post;void preorder(int inl,int inr,int postl,int postr) {if(inl>inr||postl>postr) return;//找到根节点并输出char root=post[…