docker-compose内mysql 挂载数据库目录,启动时mysql容器自动退出

2019-05-06



问题现象

使用docker-compose部署web+mysql架构网站,出现docker-compose up -d启动之后,mysql容器自动退出现象

docker-compose.yml

version: ‘2‘ 

services:

    dzzoffice:
       image: cheggwpt/php7.2-nginx
       ports:
          - "80:80"
       volumes:
          - "/mnt/dzzoffice:/app"
       links:
          - db

    db:
       image: centos/mysql-57-centos7
       environment:
          - MYSQL_USER=xxx
          - MYSQL_PASSWORD=xxx
          - MYSQL_DATABASE=xxx
       volumes:
          - "/mnt/mysql/data:/var/lib/mysql/data"

解决方案:

真正的问题所在其实就是在服务器上的volume目录/mnt/mysql/data和容器里目录/var/lib/mysql/data拥有者不一样导致的,那么如何查看拥有者,需要使用如下几条指令

查看容器中/var/lib/mysql的所有者

[[email protected] dzzoffice]# docker run -ti --rm --entrypoint="/bin/bash" centos/mysql-57-centos7 -c "ls -la /var/lib/mysql"
total 12
drwxrwxr-x 1 mysql root 4096 Apr  3 07:29 .
drwxr-xr-x 1 root  root 4096 Apr  3 07:29 ..
drwxrwxr-x 1 mysql root 4096 Apr  3 07:29 data

以上可以看出,data属于mysql用户组,而在宿主机上,新建的data目录却属于root用户组

[[email protected] mysql]# ll
total 4
drwxr-xr-x 2 root root 4096 Apr 30 16:22 data

也就是说,这两个目录的所有者不同导致的权限问题,现在把他们的id统一就可以了,统一前要先查出来容器里的mysql用户组id,然后修改服务器的/mnt/mysql/data下的用户组id

查出来容器里的mysql用户组id

docker run -ti --rm --entrypoint="/bin/bash" centos/mysql-57-centos7 -c "cat /etc/group"
root:x:0:mysql
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
cgred:x:998:
mysql:x:27:

可以看到mysql的组ID是27,将宿主机的data目录组ID改为27即可

[[email protected] dzzoffice]# chown -R 27 mysql/data
[[email protected] dzzoffice]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
avahi-autoipd:x:170:
ssh_keys:x:999:
systemd-journal:x:190:
dbus:x:81:
polkitd:x:998:
dip:x:40:
tss:x:59:
ntp:x:38:
slocate:x:21:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
tcpdump:x:72:
input:x:997:
systemd-network:x:192:
cgred:x:996:
gitlab-www:x:995:
git:x:994:
gitlab-redis:x:993:
gitlab-psql:x:992:
gitlab-prometheus:x:991:
mysql:x:27:

以上可看到修改后的data组ID已经改变,已经与容器内部data相同,再次启动容器,发现正常运行

[[email protected] dzzoffice]# docker-compose up -d
Creating dzzoffice_db_1 ...
Creating dzzoffice_db_1 ... done
Creating dzzoffice_dzzoffice_1 ...
Creating dzzoffice_dzzoffice_1
Creating dzzoffice_dzzoffice_1 ... done
[[email protected] dzzoffice]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                  PORTS                                     NAMES
9ec3fe00ec33        cheggwpt/php7.2-nginx     "/entrypoint.sh su..."   1 second ago        Up Less than a second   443/tcp, 9000/tcp, 0.0.0.0:8000->80/tcp   dzzoffice_dzzoffice_1
62db492d56c5        centos/mysql-57-centos7   "container-entrypo..."   3 seconds ago       Up 2 seconds            3306/tcp                                  dzzoffice_db_1

参考文章:

https://blog.csdn.net/grape875499765/article/details/80089853

原文地址:https://www.cnblogs.com/fqxy/p/10821112.html

时间: 2024-08-03 19:24:01

docker-compose内mysql 挂载数据库目录,启动时mysql容器自动退出的相关文章

mysql更改数据库目录提示“ERROR 2002 (HY000): '/var/lib/mysql/mysql.sock' (2)”

操作系统环境如下: [[email protected] data]# cat /etc/issue CentOS release 6.7 (Final) Kernel \r on an \m [[email protected] data]# uname -r 3.19.0-25-generic [[email protected] data]# getconf LONG_BIT 64 mysql数据库由于yum安装方式,所以默认的数据库目录是/var/lib/mysql,也就是my.cnf文

脚本-每3天对数据库目录/var/lib/mysql做物理备份 把数据备份到系统/opt/dbbak目录

每3天对数据库目录/var/lib/mysql做物理备份 把数据备份到系统/opt/dbbak目录 #!/bin/bash DAY=`date+%Y-%m-%d` SIZE=`du-sh /var/lib/mysql` cd/opt/dbbak  2> /dev/null  || mkdir /opt/dbbak echo"Date: $DAY" > /opt/dbbak/dbinfo.txt echo"Total Database Size: $SIZE&quo

mysql修改数据库目录

环境: OS:Red Hat Linux As 5 DB:MySql 5.5 在linux下安装好mysql后,默认的数据文件路径存放在/var/lib/mysql目录下,下面的步骤说明如将该目录下的数据文件迁移到其他目录. 1.创建数据库目录并将该目录权限属主修改为mysql[[email protected] /]# mkdir -p mysql/data[[email protected] /]# chown -R mysql:mysql ./mysql 2.停止mysql服务[[emai

Ubuntu修改MySQL默认数据库目录

在CentOS修改MySQL数据库目录很简单,在my.cnf更改datadir路径后,启动即可,但在Ubuntu系统初次更改,可就上火了,因为Ubuntu有个AppArmor,是一个Linux系统安全应用程序,类似于Selinux,AppArmor默认安全策略定义个别应用程序可以访问系统资源和各自的特权,如果不设置服务的执行程序,即使你改了属主属组并0777权限,也是对服务起不到作用.网上大多数资料都说是权限问题,的确目录属性必须要改的,但不能解决问题.操作很简单,留个备忘,请看步骤! 1.停掉

docker容器自动退出的问题

如果用了一段时间的docker就会发现,我们的容器经常用了一段时间就自动退出了,docker ps已经找不到了,在docker ps -a里面了,然后我们docker start containerId 想重新开启这个容器,可能这次来的更快,没几分钟又只能在docker ps -a中找到了,容器又自己关了.由这个问题又可能引发其它很多的问题. 问题思路:docker run指定的命令如果不是那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的.-d命令是设置detach为true

如何避免DockerPC蛋蛋源码下载 容器启动脚本运行后自动退出—

docker build DocPC蛋蛋源码下载 联系方式:QQ:2747044651 网址http://zhengtuwl.com kerfile后,采用docker run --name xxx -d 运行容器,发现start.sh执行后容器就退出了,根本无法启动定时任务,网上各种办法有说用nohup,有死循环,还有说用信号,发现都不靠谱.分析了一下docker的机制,一个docker容器同时只能管理一个进程,这个进程退出后,容器也就退出了.这并不意味着一个容器里只能同时运行一个进程(那样太

详解在 Linux 启动时,如何自动执行命令或脚本

我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟.当你注销或者关机时,也是这样. 更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作. 本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法. 注意:我们假定使用的是 Bash 作为登录及注销的主 Shell.如果你使用的是其他 Shell,那么有些方法可能会无效.如果有其他的疑问

mysql数据库无法启动恢复 mysql数据库崩溃恢复 mysql数据库恢复

客户名称 保密 数据类型 mysql 5.5 innodb 数据容量 1500 MB 故障类型 服务器断电导致mysql无法启动.客户自己尝试innodb崩溃恢复从参数1-6无效. InnoDB: for more information. InnoDB: Error: trying to access page number 805281720 in space 0, InnoDB: space name .\ibdata1, InnoDB: which is outside the tabl

mysql 1069 数据库无法启动解决办法

mysql无缘无故的启动不了了. 在控制台里面用root连接,报错10061. 在服务管理里面启动,报错1069. 在网上找了一些解决方法,删除my.ini之类的,都无效.后来在百度经验里面找到了可行办法. step1:在“本地用户和组”里面修改 本地mysql账号的密码 step2:在服务里面修改对应的登录密码 stet3:启动mysql服务,ok...  mysql正常连接 step4:重启apache,后台ok 参考连接:http://jingyan.baidu.com/album/187