【问题标题】:Dockerfile set to start wordpress container with php and mysql, starts mariadb insteadDockerfile 设置为使用 php 和 mysql 启动 wordpress 容器,改为启动 mariadb
【发布时间】:2019-07-31 19:16:54
【问题描述】:

所以我有一个运行 ubuntu 的 docker 服务器,并且我的本地环境(在 MacBook Pro 硬件和 OSX 上运行的 docker)在 2 天前运行良好。它有一个构建问题,所以我尝试重建,但现在我花了过去 12 个小时试图让它构建。在每个结果中,我得到的最接近的是它会启动服务器,但它将使用 MariaDB 而不是 MySQL 启动它。这导致 WordPress 只是吐出“无法连接到数据库”错误。

这是日志在图像假脱机时所说的:

Step 6/10 : RUN find /var/lib/mysql -type f -exec touch {} \; && \
    service mysql start && \
    mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('{redacted}');" && \
    mysql -u root -pmysql -e "DROP DATABASE if exists theTable; DROP DATABASE if exists secondTable; CREATE DATABASE theTable; CREATE DATABASE secondTable;" && \
    mysql -u root -pmysql theTable < /code/devdb/theTable.sql && \
 ---> Running in e1205f2fa886
Starting MariaDB database server: mysqld.

我认为问题在于几个月前发生的对 php7.2 的升级,但我认为 dockerfile 从未更新过。我尝试使用最新的官方 php7.2-fpm 映像,但随后 apache 命令抛出错误。所以我尝试了 php7.2-apache,但随后 php 抛出错误说“gd”没有安装。但后来我尝试使用

添加它
apt-get install php7.2-xxx 

也尝试过使用

rm /etc/apt/preferences.d/no-debian-php && \
docker-php-ext-install {XXX}

然后我让它至少启动服务器

wordpress:php7.2-apache

mobingi/ubuntu-apache2-php7:7.2 

服务器启动,但它启动了一个 MariaDB 映像!

我也让服务器开始使用

binhle410/php7.2-fpm

但更奇怪的事情发生了,每个页面只显示 php 代码。就像浏览器只是在每个页面上回显了 header php 文件。

这是相关的 DockerFile:

FROM wordpress:php7.2-apache

RUN usermod -u 1000 www-data && \
    apt-get -y update && apt-get -y upgrade && \
    apt-get -y install default-mysql-server git && \
    a2enmod expires && a2enmod headers && a2enmod rewrite && \
    sed -i -e 's/None/All/g' /etc/apache2/apache2.conf && \
    mkdir -p /var/www/html && \
    curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer

RUN mkdir -p /code
COPY ./devdb /code/devdb

RUN find /var/lib/mysql -type f -exec touch {} \; && \
    service mysql start && \
    mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('{redacted}');" && \
    mysql -u root -pmysql -e "DROP DATABASE if exists theTable; DROP DATABASE if exists secondTable; CREATE DATABASE theTable; CREATE DATABASE secondTable;" && \
    mysql -u root -pmysql theTable < /code/devdb/theTable.sql && \

还有 docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
      - ./:/code
      - /var/lib/mysql
      - ./tests:/var/www/html/tests
      - ./vendor:/var/www/html/vendor
    environment:
      MYSQL_ROOT_PASSWORD: {redacted}
      MYSQL_DATABASE: theTable
      DOCKER_DEBUG: 1

我得到的结果是,当我运行 docker-compose up --build 时,它会启动服务器,但会启动一个 mariadb 而不是 wordpress 无法链接到的 mysql db。 docker 镜像应该使用我拥有的 sql 文件而不是 mariadb 镜像来启动 mysql 服务器。

这是控制台输出的内容:

Step 6/10 : RUN find /var/lib/mysql -type f -exec touch {} \; && \
    service mysql start && \
    mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('{redacted}');" && \
    mysql -u root -pmysql -e "DROP DATABASE if exists theTable; DROP DATABASE if exists secondTable; CREATE DATABASE theTable; CREATE DATABASE secondTable;" && \
    mysql -u root -pmysql theTable < /code/devdb/theTable.sql && \
 ---> Running in e1205f2fa886
Starting MariaDB database server: mysqld.

【问题讨论】:

    标签: php mysql wordpress docker mariadb


    【解决方案1】:

    想通了

    FROM mobingi/ubuntu-apache2-php7:7.2
    
    # disable interactive functions
    ARG DEBIAN_FRONTEND=noninteractive​
    
    RUN usermod -u 1000 www-data && \
        apt-get -y update && apt-get -y upgrade && \
        apt-get -y install curl zip unzip php7.2-zip mysql-server git && \
        a2enmod expires && a2enmod headers && a2enmod rewrite && \
        sed -i -e 's/None/All/g' /etc/apache2/apache2.conf && \
        mkdir -p /var/www/html && \
        curl -sS https://getcomposer.org/installer | php && \
        mv composer.phar /usr/local/bin/composer
    
    RUN mkdir -p /code
    COPY ./devdb /code/devdb
    RUN find /var/lib/mysql -type f -exec touch {} \; && \
        service mysql start && \
        mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD({redacted});" && \
        mysql -u root -pmysql -e "DROP DATABASE if exists theTable; DROP DATABASE if exists secondTable; CREATE DATABASE theTable; CREATE DATABASE secondTable;" && \
        mysql -u root -pmysql theTable < /code/devdb/theTable.sql && \
        mysql -u root -pmysql secondTable < /code/devdb/secondTable.sql 
    ...
    

    工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2014-05-14
      • 1970-01-01
      • 2015-02-07
      • 2018-09-10
      • 2018-08-08
      • 2018-09-12
      相关资源
      最近更新 更多