最近,遇到一个问题:
之前项目所在的服务器,因同事有需求,在没有告诉我的情况下,他擅自重启了。
然后,在启动容器时,发现上面的MySQL容器启动不了。然后,又把该MySQL容器删除进行重新创建。
结果,MySQL容器虽然重新创建成功,但是容器里面之前挂载的 Volume 并未挂载成功。进而导致项目连接数据库时,怎么都连接不成功,一直报数据库连接失败!
那当然了,里面都没有项目需要的数据库,当然连接失败了。。。。。。
经此,我重新做了以下操作:
1)创建 Volume :
docker volume create mysql-data
docker volume ls
2)根据新 Volume 创建新 MySQL 容器:
sudo docker run --privileged=true \
-p 3306:3306 --name app-fut-mysql \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=数据库密码 \
-d mysql:5.7
参考:
https://www.jianshu.com/p/84d66703be69
但是这样治标不治本啊,总不能每次容器出问题了,我都重新创建容器再复制数据吧!
所以,我采用了 docker-compose 方式,写了个 compose 文件:
version: '3'
services:
mysql57:
image: mysql:5.7
privileged: true
restart: always
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 数据库密码
volumes:
- /opt/mysql/log:/var/log/mysql
- /opt/mysql/data:/var/lib/mysql
- /opt/mysql/conf:/etc/mysql/conf.d
php74:
image: app-gavin:php-7.4-fpm-gd
ports:
- 9000:9000
volumes:
- /opt/apps:/www
nginx:
image: nginx:latest
volumes:
- /opt/apps:/usr/share/nginx/html
- /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/docker/nginx/cert/:/cert
- /opt/apps/keyfile/密钥文件.txt:/密钥文件.txt
ports:
- 80:80
- 443:443
- 8080:8080
depends_on:
- mysql57
- php74
如果挂载 docker volume 的则用下面的 Yaml:
version: '3'
services:
mysql57:
image: mysql:5.7
privileged: true
restart: always
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 数据库密码
volumes:
- mysql-data:/var/lib/mysql
php74:
image: app-gavin:php-7.4-fpm-gd
ports:
- 9000:9000
volumes:
- /opt/apps:/www
nginx:
image: nginx:latest
volumes:
- /opt/apps:/usr/share/nginx/html
- /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/docker/nginx/cert/:/cert
- /opt/apps/keyfile/密钥文件.txt:/密钥文件.txt
ports:
- 80:80
- 443:443
- 8080:8080
depends_on:
- mysql57
- php74
volumes:
mysql-data: