【发布时间】:2019-04-25 00:39:32
【问题描述】:
我正在设置一个 Dockerfile,我可以在其中运行我的自动化测试,但在连接到 mysql 数据库时遇到了问题。
Dockerfile 依赖于预先构建的映像,如下所示:
# Stage 0, assign argument as multistage image alias
ARG PHP_IMAGE
FROM ${PHP_IMAGE} as image
# Stage 1, start tests
FROM php:7.2-fpm
RUN curl -sS https://getcomposer.org/installer | php \
&& chmod +x composer.phar && mv composer.phar /usr/local/bin/composer
RUN apt-get update && apt-get install -y gnupg
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
apt-get install -yq nodejs build-essential \
git unzip \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
subversion \
&& curl -sL https://deb.nodesource.com/setup_8.x | bash - \
&& pecl install mcrypt-1.0.1 \
&& docker-php-ext-enable mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install -j$(nproc) mysqli
RUN apt-get install -y mysql-server
RUN /etc/init.d/mysql start
RUN mysqladmin -u root -p status
RUN yes | pecl install xdebug \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
RUN npm install -g npm
COPY --from=image /var/www/html/ /var/www/html/
WORKDIR /var/www/html/
COPY scripts/develop.sh develop.sh
COPY scripts/docker-test.sh docker-test.sh
RUN ["/bin/bash", "-c", "bash develop.sh && bash docker-test.sh"]
我添加了RUN mysqladmin -u root -p status 来尝试调试为什么连接到mysql失败,我得到了
输入密码:mysqladmin:连接到'localhost'的服务器失败 error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")' 检查 mysqld 是否正在运行并且套接字:'/var/run/mysqld/mysqld.sock' 存在!
为了运行这个我正在运行
docker build -t $TEST_DOCKER_NAME --build-arg PHP_IMAGE=$DOCKER_IMAGE_NAME_PHP -f Dockerfile.test .
TEST_DOCKER_NAME 和 DOCKER_IMAGE_NAME_PHP 存储在一个 env 文件中并从那里读取。 PHP 映像已成功构建,我正在使用它将文件从那里复制到这里,以便我可以运行 PHPUnit。
当我删除 RUN 行时,当我尝试运行创建数据库的脚本时,我的构建失败
mysqladmin: 连接到 'localhost' 的服务器失败 错误:'无法连接到'localhost'上的MySQL服务器(99“无法分配请求的地址”)' 检查 mysqld 是否在 localhost 上运行并且端口是 3306。 您可以通过执行 'telnet localhost 3306' 来检查这一点
我需要在我的 Dockerfile 中做什么才能使其正常工作?
【问题讨论】:
-
如果
status是密码正确的语法应该是mysqladmin -u root -pstatus -
我删除了密码,它显示了
mysqladmin命令的输出... -
未来:不要删除密码,只需将其更改为
****或PASSWORD