ubuntu 安装挂载mysql, redis和mongodb服务

因为有两台电脑,所以准备把ubuntu电脑作成对外服务提供,各种数据库,中间件都使用docker安装管理,然后挂载配置和日志到本地,提供给另一台电脑的对外服务。

1. 安装docker

sudo apt search docker
sudo apt install docker.io

看到很多安装都繁琐,我也还是在初步使用,如上安装暂时没有发现有什么问题,出现问题再更改吧。

# 简单的docker命令
sudo docker ps -a               # 查看容器状态,在这可以看到容器的名字,id,创建时间和端口信息
sudo docker images              # 查看镜像
sudo docker pull something      # 拉取something镜像
sudo docker run -d --name abaaba -p src_port:container_port something      #后台运行something,链接本地src_port端口到container_port容器端口
sudo docker exec -it container_id /bin/bash        # 进入指定id的容器
sudo docker rm -f container_id                     # 删除指定id的容器
sudo docker cp src_file abaaba:/d/a                # 复制主机src_file文件到abaaba容器根目录下d文件夹内的a文件中;也可以反过来用,把容器内文件复制到本地
sudo docker inspect container                      # 查看容器的配置参数
sudo docker logs container                         # 查看容器输出

2.1 docker安装mysql

sudo docker pull mysql
# 如上把刚拉取的mysql跑起来看看具体信息
sduo docker run -d -p 3306:3306 --name mysql_service -e MYSQL_ROOT_PASSWORD=root  mysql
sudo docker exec -it mysql_service /bin/bash

如下是mysql容器内信息:

# 可以看到容器主体信息就这样,是一个oracle打造的linux server,专门供给oracle类的服务,比如mysql
bash-4.4# cat /etc/os-release 
NAME="Oracle Linux Server"
VERSION="8.7"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.7"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:7:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.7
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.7
bash-4.4# mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
bash-4.4# vim /etc/mysql/my.cnf
bash: vim: command not found
# 各种command not found
bash-4.4# apt install aaa
bash: apt: command not found
bash-4.4# dnf install vim
bash: dnf: command not found
bash-4.4# yum install aaa
bash: yum: command not found
bash-4.4# 

本来是找到了conf文件,想直接在容器内部编辑一下的,结果啥习惯用的命令都没有,用yum,apt都试了一下,看来不是redhat和debian包装的豁,然后搜了一下oracle linux的包管理器(因为上面查信息看到的就是这个嘛),发现它们可以用dnf(某博客找到的,又拿来碰了一下),骗鬼的。干脆放弃,反正可以用docker cp,接下来就确定一下mysql的几个重要目录:logs,data和conf目录

bash-4.4# ls /var/lib | grep mysql
mysql
mysql-files
mysql-keyring
bash-4.4# ls /etc/mysql/       
conf.d  
bash-4.4# ls /var/log
mysqld.log
bash-4.4#  

好,确定了那几个默认路径没错,这就算是目标所在了,默认信息可以在docker官网上看,然后对照,讲究个因地制宜。

2.2 挂载mysql重要文件到本地

知道不少信息以后就开始配置,一个是挂载mysql的日志,conf和data目录到本地,另一个就是设置mysql远程访问权限。

sudo docker run -d --restart=always -p 3306:3306 \
-v /opt/services/mysql/conf:/etc/mysql/conf.d \
-v /opt/services/mysql/logs:/var/log \
-v /opt/services/mysql/data:/var/lib \
--name mysql_service \
-e MYSQL_ROOT_PASSWORD=123456

# 看看跑起来了没
sudo docker ps -a
# 进入容器进行远程访问设置
sudo docker exec -it mysql_service /bin/bash
# 或者使用mysql客户端进行设置
sudo apt install mysql-client
mysql -uroot -p

如上,-d参数设置容器后台运行,链接好默认端口,-v参数链接本地和容器目录,也就是前面找的那几个data,log和conf文件夹了,再来设置容器名,还有几个容器内部的环境参数,具体可参考上面docker官网的信息,这里是指定一个root用户的密码,方便后续设置。

设置远程访问

bash-4.4# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

进入mysql的shell界面以后,进行以下设置:

# 进入mysql database
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
# 查看用户信息,主要确定是否有两个root用户
mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

# 删掉主机不限定的root用户,方便后面修改权限
mysql> delete from user where host='%' and user='root';
Query OK, 1 row affected (0.01 sec)

mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)

# 把删掉的用户添加回来
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 刷权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

# 设置远程访问
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;

上面设置要根据不同版本有所变通,然后检验一下远程访问,我用另一台电脑,连上同一个wifi,两台电脑就在同一个局域网了,网络连通性ok,然后使用服务的电脑输入mysql -h 192.168.0.100 -uroot -p命令,要记得在使用服务的电脑也装上mysql客户端并确保命令可用,当然也可以用其他工具测试,比如navicat,可惜付费,另外就是注意ip问题了。

2.3 添加操作用户并赋以远程权限

进入mysql数据库

mysql> create user 'jam'@'%' identified by 'abcdefg123';
Query OK, 0 rows affected (0.02 sec)

mysql> create database somedb;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| somedb             |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> grant all privileges on somedb.* to 'jam'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| jam              | %         |
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql> 

然后以新建用户登录一下,看一下信息:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| somedb             |
+--------------------+
3 rows in set (0.00 sec)

mysql> use somedb;
Database changed
mysql> show tables;
Empty set (0.01 sec)

mysql> 

2.4 数据备份问题

在mysql中有个mysqldump命令,可以导出sql文件作为备份,也可以从文件恢复:

# PS:MYSQL_ROOT_PASSWORD是一开始运行容器时-e参数的设置,应该是定死在了容器参数中,进入容器echo一下可以看到
docker exec mysql_service sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > all-databases.sql
docker exec -i mysql_service sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < all-databases.sql

都是docker exec来控制容器执行命令来导出和导入sql文件,这里可以进行一下实验,就是在已经配置好的mysql容器导出备份文件以后,把容器删掉,然后走原路跑起来再导入前面导出的all-databases.sql,看看可否远程访问。

ok,哦了。

3.1 docker安装redis

# 老规矩
sudo docker pull redis
sudo docker run -it redis /bin/bash

上面以交互方式跑了刚pull下来的redis镜像,进入redis镜像的bash,照搬上面的路子来

# 一进来就是data目录
root@601de8c4004d:/data# ls 
root@601de8c4004d:/data# cd ..
root@601de8c4004d:/# ls
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@601de8c4004d:/# 
root@020e99c6a363:/# ls /etc
adduser.conf		debconf.conf	fstab	  host.conf  ld.so.cache    mke2fs.conf    pam.conf   rc1.d  resolv.conf  skel		 xattr.conf
alternatives		debian_version	gai.conf  hostname   ld.so.conf     motd	   pam.d      rc2.d  rmt	  subgid
apt			default		group	  hosts      ld.so.conf.d   mtab	   passwd     rc3.d  security	  subuid
bash.bashrc		deluser.conf	group-	  init.d     libaudit.conf  netconfig	   passwd-    rc4.d  selinux	  systemd
bindresvport.blacklist	dpkg		gshadow   issue      localtime	    nsswitch.conf  profile    rc5.d  shadow	  terminfo
cron.d			e2scrub.conf	gshadow-  issue.net  login.defs     opt		   profile.d  rc6.d  shadow-	  timezone
cron.daily		environment	gss	  kernel     logrotate.d    os-release	   rc0.d      rcS.d  shells	  update-motd.d
root@020e99c6a363:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@020e99c6a363:/# apt install vim
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package vim
root@020e99c6a363:/#

情况差不多,许多容器相关信息都在etc里面,查看系统版本信息,是Debian,还好,是apt包管理,不过试了一下安装vim包,没成功,那就是需要给添加apt源信息了,不过这里不重要,知道个容器情况就行。继续往下:

root@601de8c4004d:/# ls /etc/redis
ls: cannot access '/etc/redis': No such file or directory
root@601de8c4004d:/# ls /usr/local/etc/redis
ls: cannot access '/usr/local/etc/redis': No such file or directory
root@601de8c4004d:/# ls /usr/local/etc
root@601de8c4004d:/# 

其实上面已经看过了,etc目录中并没有redis目录,查了一下,好像会有个默认目录在/usr/local/etc中,但还是没有,后续跟进是,好像配置是硬编码写进配置了(别人这么说的),那就魔改一下别人的成功经验:

# 直接挂载data目录和redis.conf文件(该文件只是touch了一下,没有实际内容),只是为了确认一下想要配置运行直接映射是否可行(redis-server /usr/local/etc/redis/redis.conf 这个命令不可少,是容器内执行的)
sudo docker run -d --name redis_test -p 6379:6379 --restart always \
-v /opt/services/redis/data:/data \
-v /opt/services/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf redis \
redis-server /usr/local/etc/redis/redis.conf
# 查看一下运行日志,不过慢了一步,30m看不全
sudo docker logs --since 30m redis_test
sudo docker ps -a
# 进去看看情况
sudo docker exec -it redis_test /bin/bash

如下:

root@e08cc1aea8f0:/data# redis-cli
127.0.0.1:6379> get s1
(nil)
127.0.0.1:6379> quit
root@e08cc1aea8f0:/data# exit
exit

3.2 进行配置

好歹是跑起来了,证明方法可用,后续就正式编写redis.conf文件还有搭配上一些密码参数,嗯,主要是想使用它作为python的任务队列,暂时不做过多设置,删掉它重开一个:

# 检验服务开启的准备,本地安装客户端
sudo apt install redis-tools
sudo docker rm -f redis_test

因为redis的日志好像要写进配置里面才会有输出文件,所以还是写一下配置吧:

sudo vim /opt/service/redis/conf/redis.conf

# 打开写进去的内容

# 确立工作目录
dir /data
# 显式指名日志文件
logfile /data/redis.log
# 设置日志输出等级
loglevel verbose

然后把容器跑起来

sudo docker run -d --name redis_service -p 6379:6379 --restart always \
-v /opt/services/redis/data:/data \
-v /opt/services/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /opt/services/redis/log/redis.log:/data/redis.log \
redis redis-server /usr/local/etc/redis/redis.conf \
--requirepass 123456

跑起来以后,看了一下日志输出,有个waring,啥回事?好像和性能指标有关:
1:M 21 Apr 2023 12:38:13.039 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

听人劝吃饱饭,日志都给出办法了,那就试一下吧,编辑/etc/sysctl.conf文件,末尾添加上vm.overcommit_memory = 1,后面简单差了一下vm.overcommit_memory参数,是指定内核分配内存方式的,嗯,没问题。一键重启,再继续测试,另外的电脑输入命令:

PS D:\Desktop> redis-cli -h 192.168.0.100 -p 6379
192.168.0.100:6379> auth 123456
OK
192.168.0.100:6379> exit
PS D:\Desktop> 

如果远程PC无法登录,可以本地检查一下服务是否开起来了:

# 看容器运行状态
sudo docker ps -a
# 看容器运行日志
sudo docker logs --since 30m redis_service

# 检查服务
jam@jam:~$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> get s1
(nil)
127.0.0.1:6379> exit
jam@jam:~$ redis-cli -h 192.168.0.100 -p 6379
192.168.0.105:6379> auth 123456
OK
192.168.0.105:6379> get s1
(nil)
192.168.0.105:6379> exit
jam@jam:~$ 

如果有问题呢,可以查一下是否需要关一下protected-mode,还有bind一下0.0.0.0的ip使得远程ip可访问,还有端口等等,这些检查都是建立在命令输入无误的前提。

3.3 备份和恢复

在上面已经配置好工作目录的前提,进入redis数据库,输入save命令得到dump.rdb备份文件,想要恢复,就把该文件移动到redis的工作目录并重启,不过这是容器,如果涉及容器删除那就docker cp一下文件到容器内部吧。

4.1 下载安装mongodb

mysql是输入关系型数据库(RDBMS),而redis和mongodb则是非关系型(NON-RDBMS,not only的意思,记得是这样),mongodb则是和json适配性特别好的一个数据库。

jam@jam:~$ sudo docker pull mongodb
Using default tag: latest
Error response from daemon: pull access denied for mongodb, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
jam@jam:~$ 

一上来就搞我,就很奇怪,后来才发现官方叫他mongo没有db数据库的名字,咩咩咩~!

# 还挺大只
jam@jam:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    eca1379fe8b5   3 days ago    117MB
mysql        latest    8189e588b0e8   3 days ago    564MB
mongo        latest    9a5e0d0cf6de   5 weeks ago   646MB
# 简单跑一下
jam@jam:~$ sudo docker run -itd --name mongo_test -p 27017:27017 mongo --auth
2540648d3ed97c888066751e95d9

跑起来的docker容器情况如下:

root@2540648d3ed9:/# cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# mongodb中的标准配置文件样式
root@2540648d3ed9:/# cat /etc/mongod.conf.orig 
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
#  engine:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1


# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

简单看了看,mongodb的日志和data目录,一个在/var/log,一个直接就在/data目录下,干脆点链接起来就是了:

# 删掉原来的
sudo docker rm -f mongo_test
sudo docker run -d --name mongo_service --restart=always -p 27017:27017 \
-v /opt/services/mongodb/data:/data \
-v /opt/services/mongodb/log:/var/log \
mongo --auth

然后进去数据库添加一下用户,现在的mongodb是版本6的,所以用mongosh命令进入数据库

jam@jam:~$ sudo docker exec -it mongo_service mongosh admin
Current Mongosh Log ID:	644551548003cd224549881c
Connecting to:		mongodb://127.0.0.1:27017/admin?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.0
Using MongoDB:		6.0.5
Using Mongosh:		1.8.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

admin> db.createUser({user:'root',pwd:'mongo1234ad@',roles:[{role:'root',db:'admin'}]})
{ ok: 1 }
admin> db.auth('root','mongo1234ad@')
{ ok: 1 }
admin> db
admin
admin> show collections
system.users
system.version
admin> exit

如上操作,添加成功以后,就需要认证检验了,auth一下,就可以查看信息了,看看远程是否可行。en。。。。。。好像不太行,查了一下还是要编辑/etc/mongod.conf.orig文件,那就copy出来,改完以后再copy回去,也就懒得在docker里面安装vim了:

sudo docker cp mongo_service:/etc/mongod.conf.orig mongod.conf
# 修改bindIp参数的127.0.0.1为0.0.0.0,如果是注释,记得去掉当前注释
vim mongod.conf
sudo docker cp mongod.conf mongo_service:/etc/mongod.conf.orig
# 重启一下
sudo docker restart mongo_service

末 一些常见的错误

权限不够

jam@jam:~$ docker ps -a
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied

这一类执行命令权限不够都可以通过添加sudo来获取管理员权限来执行命令,或者su切换root用户,在linux里面无脑sudo或者su都是比较危险的,新手熟悉了就要进阶了。

存在冲突

jam@jam:~$ sudo docker run -d -p 3306:3306 --name mysql_service mysql -e MYSQL_ROOT_PASSWORD=123456
docker: Error response from daemon: Conflict. The container name "/mysql_service" is already in use by container "9784c160d23599ab183e0df49265be1db0fa99a688e21dd5c5be7bb2a1a080d5". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

上面的输出也介绍的很明白,名为mysql_service的container已存在,这种情况就是命名冲突,可以换名来跑,不过这样又可能碰上端口冲突:

jam@jam:~$ sudo docker run -d -p 3306:3306 --name mysql_s -e MYSQL_ROOT_PASSWORD=123456 mysql
8b45c45cccbaf5da304e6d56771543832e82d94ef348289640c8fa2c98d7586d
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql_s (6eb9687ae62f473bc3e4db0c6414dd3bde9bd3aacfcdaf03e04d02154cb00b61): Bind for 0.0.0.0:3306 failed: port is already allocated.

这种情况是映射的端口冲突了,本地的3306端口只有一个,已经有一个容器在监听使用了,一个萝卜一个坑,只能换一个了:

# 因为运行失败,但还是把容器创建了,所以需要现删掉那个容器
jam@jam:~$ sudo docker rm -f mysql_s
jam@jam:~$ sudo docker run -d -p 3307:3306 --name mysql_s -e MYSQL_ROOT_PASSWORD=123456 mysql
6f12b97853ae45ce6f59a442d0154d467dd7e9898adcb06e82f44f67f9810dd6
jam@jam:~$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
6f12b97853ae   mysql     "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_s
a449d76fc655   mysql     "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql_service

嗯,算是勉强可以,但还有个33060的mysql_x协议端口还是有冲突,这个是MySQL Shell、MySQL Connectors和MySQL Router等客户端支持的X 协议端口,所以还是要微调,本来是通过-p参数再多个选项,但输出上看的有点迷糊,先不进行这样的同类容器的端口冲突管理吧,看看k8s有没有解决办法。

一个警告

WARNING: IPv4 forwarding is disabled. Networking will not work

如上所示,有一次在运行一个容器的时候出现上面警告,查了比较多的博客都说要编辑/usr/lib/sysctl.d里面的00-system.conf,加点东西再重启,不过我看了我的对应目录没有system.conf的文件,我就怀疑是电脑很久没重启了而已,果断reboot -f,问题解决。

好,搞定。

后续

在查看日志的时候有个问题,就是时间问题,看了有不少的解决办法,比如Dockerfile里面设置时区,或者跑起来以后进入到容器内部进行设置,准确来说是编辑/etc/localtime,所以我采取后面的办法,不过实现的法子是挂载本地的到容器内:

... \
-v /etc/localtime:/etc/localtime
...

### 修改

上面的mysql日志没有发挥实际作用,另外也要修正一下时间问题,删掉容器,更改为:
```shell
sudo docker run -d --restart=always -p 3306:3306 --name mysql_service \
-v /etc/localtime:/etc/localtime \
-v /opt/service/mysql/data:/var/lib/mysql \
-v /opt/service/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql

然后进去修改用户权限就好,也可以用备份sql文件来回复,也省功夫,然后是redis,主要是前面的设置有点重复,使得log和data都有一份redis.log,所以改一下目录结构:

redis
├── conf
│   └── redis.conf
└── data
    └── redis.log

效果如上,redis.conf文件内容不变,移移位就行,然后删掉原来的重跑一个:

sudo docker run -d --name redis_service -p 6379:6379 --restart=always \
-v /opt/service/redis/data:/data \
-v /opt/service/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /etc/localtime:/etc/localtime redis \
redis-server /usr/local/etc/redis/redis.conf \
--requirepass abaaba

顺带把时间也改过来了,然后mongodb如下:

sudo docker run -d --name mongo_service --restart=always -p 27017:27017 \
-v /opt/service/mongo/data:/data/db \
-v /opt//service/mongo/conf:/data/configdb \
-v /opt/service/mongo/log:/var/log/mongodb \
-v /etc/localtime:/etc/localtime \
mongo --auth

存疑

针对docker run -v的挂载,其实还有一些使用中的可能情况没有了解得够充分,这里还是记录下这个作为后续补充的入口吧。

posted @ 2023-04-20 21:32  夏目&贵志  阅读(113)  评论(0编辑  收藏  举报