【发布时间】: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