如何在Docker Compose中关联已存在的MariaDB而非创建新实例
如何让FileRun的Docker Compose使用现有MariaDB实例?
你现在的Docker Compose配置会自动创建一个新的MariaDB实例,但要改用你已经通过docker run启动的现有容器,只需要调整几个地方就行,我给你一步步讲清楚:
第一步:移除Compose里的内部DB服务
首先把原来配置里的db整个服务块删掉,因为我们不需要它了——我们要用自己已经跑起来的那个MariaDB容器。
第二步:调整Web服务的连接配置
接下来修改web服务的配置,去掉和内部DB相关的depends_on、links,然后添加环境变量来指定外部数据库的连接信息。同时要确保两个容器能互相访问(网络问题后面说)。
这里是修改后的完整Compose配置:
version: '2' services: web: image: afian/filerun ports: - "80:80" volumes: - /filerun/html:/var/www/html - /filerun/user-files:/user-files environment: FR_DB_HOST: mariadb # 这里用你现有MariaDB容器的名字,Docker同网络下可以直接用容器名访问 FR_DB_PORT: 3306 FR_DB_NAME: filerun # 要提前在现有DB里创建好这个库 FR_DB_USER: filerun # 对应现有DB里的用户,要有该库的权限 FR_DB_PASS: filerun # --- 网络配置(如果需要的话)--- # 如果现有MariaDB不在默认网络,先创建一个外部网络:docker network create filenet # 把现有容器加入网络:docker network connect filenet mariadb # 然后取消下面的注释: # networks: # - filenet # networks: # filenet: # external: true
第三步:提前配置好现有MariaDB
在启动Compose之前,你需要在现有的MariaDB容器里创建好FileRun需要的数据库和用户:
- 先进入MariaDB容器:
docker exec -it mariadb mysql -u root -p
输入你启动容器时设置的root密码passwordhere。
- 执行下面的SQL命令来创建库和用户:
CREATE DATABASE IF NOT EXISTS filerun; CREATE USER IF NOT EXISTS 'filerun'@'%' IDENTIFIED BY 'filerun'; GRANT ALL PRIVILEGES ON filerun.* TO 'filerun'@'%'; FLUSH PRIVILEGES;
关于网络的补充说明
如果你的现有MariaDB容器和Compose启动的web容器不在同一个Docker网络里,web服务会找不到mariadb这个主机名。这时候需要:
- 创建一个外部网络:
docker network create filenet - 把现有MariaDB容器加入这个网络:
docker network connect filenet mariadb - 然后打开Compose配置里的网络部分注释,让web服务也用这个网络。
这样调整之后,启动Compose的时候,FileRun的web容器就会连接到你已经存在的MariaDB实例了~
内容的提问来源于stack exchange,提问作者Chweng Mega
相关产品推荐
相关产品推荐

