繁体   English   中英

MariaDB无法在docker容器中

[英]Can't MariaDB inside docker container

我需要在现有的Docker容器中运行MariaDB。

构建和安装工作正常,但是当Docker执行时

RUN mysql < init.sql

加载我得到的数据库模式

Can't connect to MySQL server (111 Connection refused)

但是当我运行容器并执行

docker exec -it silly_allen /bin/bash -c "mysql < init.sql" 

它工作正常。

可能是什么问题?

谢谢!

编辑:这是与数据库相关的Dockerfile的一部分。

FROM centos:7

WORKDIR /root

...
RUN echo "[mariadb]" >> /etc/yum.repos.d/MariaDB.repo
RUN echo "name = MariaDB" >> /etc/yum.repos.d/MariaDB.repo
RUN echo "baseurl = http://yum.mariadb.org/10.1/centos7-amd64" >> /etc/yum.repos.d/MariaDB.repo
RUN echo "gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB" >> /etc/yum.repos.d/MariaDB.repo
RUN echo "gpgcheck=1" >> /etc/yum.repos.d/MariaDB.repo
RUN rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
RUN yum install -y MariaDB-server MariaDB-client
RUN yum clean all

RUN echo "[mysqld]" > /etc/my.cnf
RUN echo "bind-address=0.0.0.0" >> /etc/my.cnf

RUN /etc/init.d/mysql restart

ADD init.sql /root
RUN mysql < /root/init.sql
...

根据Docker的最佳实践,每个进程要运行一个容器。

另外,还有一个正式的mariadb映像 ,它允许您将目录挂载为卷,其中可能包含SQL转储。 这些转储是在创建容器时自动导入的,因此可能很方便。

我建议不要使用一个非常大的dockerfile,而是使用docker docker-compose将其分解为单独的服务

但是,如果您确实希望保持这种状态,建议您将ADD init.sql ...部分移到顶部,并将服务器启动部分和dump import连接起来,因为每个RUN命令都是Docker的单独层。 因此,您需要类似StackOverflow问题的答案中所述的内容:

RUN /bin/bash -c "/usr/bin/mysqld_safe &" && \
  sleep 5 && \
  mysql -u root -e "CREATE DATABASE mydb" && \
  mysql -u root mydb < /root/init.sql

以便服务器初始化并将转储导入到一层

据我mysql < init.sql ,您正在尝试在启动数据库之前运行mysql < init.sql 该错误表明此命令要求数据库正在运行。

要解决此问题,请将启动脚本添加到包含以下内容的容器中:

mysqld
mysql < init.sql

并更改您的Dockerfile CMD以调用此脚本。

这样是对的:

# cat Dockerfile 
...
ADD init.sql /tmp
ADD initdb.sh /tmp
RUN /tmp/initdb.bash
CMD ["/usr/bin/mysqld_safe --datadir=/var/lib/mysql"]

和脚本:

# cat dump/initdb.bash 
#!/bin/bash

set -e
set -x

mysqld_safe --datadir='/var/lib/mysql' --user=root &
until mysqladmin ping >/dev/null 2>&1; do
   sleep 0.2
done

mysql -e 'create database init;' && \
mysql init < /tmp/init.sql && \
echo "Successfully imported" && exit 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM