【问题标题】:Docker, referencing a different container. Call mysqldump using php commandDocker,引用不同的容器。使用 php 命令调用 mysqldump
【发布时间】:2016-10-14 19:03:45
【问题描述】:

我使用 Docker 在 Symfony3 项目上安装了一个数据库备份包 (https://github.com/dizda/CloudBackupBundle),但由于找不到 PHP 或 MySQL,我无法让它工作

当我通过 exec、run 或通过 cron 运行 php app/console --env=prod dizda:backup:start 时。我通过 PHP 映像收到 mysqldump command not found 错误,或者从 Mysql/db 映像收到 PHP not found 错误。

如何运行一个 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 还是很陌生,所以你可以随意看到一些简单的改进……我正处于试错阶段!

【问题讨论】:

    标签: php mysql symfony docker docker-compose


    【解决方案1】:

    包含代码的映像应该具有运行代码所需的所有依赖项。

    在这种情况下,您的代码需要在本地安装 mysqldump 才能运行。我认为这是您的代码的依赖项。

    在你的 Dockerfile 中添加一个 RUN 行来安装 mysqldump 命令可能是有意义的,这样你的代码就可以使用它。

    另一种方法是将数据库备份过程外部化,而不是将其留给您的应用程序。您可以拥有一些在 cron 上运行的容器,并以这种方式执行 mysqldump 进程。

    我认为这两种方法都是干净的。

    【讨论】:

    • 我的数据库映像已经安装了 mysqldump,我不能以某种方式使用它还是必须重新安装它?
    • 容器在设计上提供了相互隔离。尽管其他容器/图像也有它,但您肯定希望您的图像在那里安装所需的一切。
    • 如果他在php容器中安装mysql转储,是否可以从远程数据库进行mysql转储?
    • 是的。 mysqldump只是一个mysql客户端,可以连接远程数据库。
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多