我已经使用Docker在Symfony 3项目上安装了一个数据库备份包(https://github.com/dizda/CloudBackupBundle),但是由于找不到PHP或MySQL,我无法使其工作
当我通过exec、run或cron运行php app/console --env=prod dizda:backup:start
时,我通过PHP映像得到mysqldump命令未找到错误,或者从Mysql/db映像得到PHP未找到错误。
我如何开始运行一个php命令,然后运行一个mysqldump命令。
我的docker-compose文件如下所示:
version: '2'
services:
web:
# image: nginx:latest
build: .
restart: always
ports:
- "80:80"
volumes:
- .:/usr/share/nginx/html
links:
- php
- db
- node
volumes_from:
- php
volumes:
- ./logs/nginx/:/var/log/nginx
php:
# image: php:fpm
restart: always
build: ./docker_setup/php
links:
- redis
expose:
- 9000
volumes:
- .:/usr/share/nginx/html
db:
image: mysql:5.7
volumes:
- "/var/lib/mysql"
restart: always
ports:
- 8001:3306
environment:
MYSQL_ROOT_PASSWORD: gfxhae671
MYSQL_DATABASE: boxstat_db_live
MYSQL_USER: boxstat_live
MYSQL_PASSWORD: GfXhAe^7!
node:
# image: //digitallyseamless/nodejs-bower-grunt:5
build: ./docker_setup/node
volumes_from:
- php
redis:
image: redis:latest
我是相当新的 Docker ,所以和容易的改进,你可以看到随时t旗...我在尝试和错误的阶段!
2条答案
按热度按时间8yparm6h1#
包含代码的映像应该具有代码运行所需的所有依赖项。
在这种情况下,您的代码需要本地安装mysqldump才能运行。我认为这是您代码的依赖项。
在您的Dockerfile中添加一个RUN行可能是有意义的,它将安装mysqldump命令,以便您的代码可以使用它。
另一种方法是将数据库备份过程外部化,而不是将其留给应用程序,您可以让某个容器在cron上运行,并以这种方式执行mysqldump过程。
我认为这两种方法都是干净的。
lsmepo6l2#
您可以通过Dockerfile在PHP容器中安装MySQL客户端,如下所示:
停靠文件:
然后,使用以下命令(在控制器中)生成备份:
希望这能对某人有所帮助!