#php #mysql #symfony #docker #docker-compose
#php #mysql #symfony #docker #docker-compose
Вопрос:
У меня есть пакет резервного копирования базы данных (https://github.com/dizda/CloudBackupBundle ) установлен в проекте Symfony3 с использованием Docker, но я не могу заставить его работать из-за того, что он либо не находит PHP, либо не находит MySQL
Когда я запускаю php app/console --env=prod dizda:backup:start
через exec, run или через cron. Я получаю ошибку mysqldump command not found через изображение PHP или ошибку PHP not found из изображения Mysql / db.
Как мне запустить команду 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, поэтому и простые улучшения, которые вы можете увидеть, не стесняйтесь отмечать…Я на стадии проб и ошибок!
Ответ №1:
Ваше изображение, содержащее ваш код, должно иметь все зависимости, необходимые для запуска вашего кода.
В этом случае для запуска вашего кода необходимо, чтобы mysqldump был установлен локально. Я бы счел это зависимостью от вашего кода.
Возможно, имеет смысл добавить в ваш Dockerfile строку запуска, которая установит команду mysqldump, чтобы ваш код мог ее использовать.
Другим подходом в целом было бы экстернализировать процесс резервного копирования базы данных вместо того, чтобы оставлять это на усмотрение вашего приложения. У вас может быть какой-нибудь контейнер, который работает на cron и выполняет процесс mysqldump таким образом.
Я бы счел оба подхода чистыми.
Комментарии:
1. однако в моем образе БД уже установлен mysqldump, не могу ли я как-то использовать это или мне нужно установить его снова?
2. контейнеры по своей конструкции обеспечивают изоляцию друг от друга. Вы определенно хотите, чтобы в вашем образе было установлено все необходимое, несмотря на то, что в других контейнерах / изображениях это также есть.
3. И если он установит дамп mysql в контейнер php, возможно ли создать дамп mysql из удаленной базы данных?
4. да. mysqldump — это просто клиент mysql и может подключаться к удаленной базе данных.