[英]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.