我需要在现有的Docker容器中运行MariaDB。
构建和安装工作正常,但当Docker执行
RUN mysql < init.sql要加载DB模式,我会得到
Can't connect to MySQL server (111 Connection refused)但是,当我运行容器并执行
docker exec -it silly_allen /bin/bash -c "mysql < init.sql" 它工作得很好。
可能的问题是什么?
谢谢!
编辑:这是与DB相关的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
...发布于 2017-08-16 18:04:02
在我看来,您正在尝试在启动数据库之前运行mysql < init.sql。该错误显示此命令要求数据库处于运行状态。
要解决此问题,请在容器中添加一个启动脚本,其中包含:
mysqld
mysql < init.sql并将Dockerfile CMD更改为调用此脚本。
发布于 2017-08-16 18:19:37
根据Docker的最佳实践,每个要运行的进程应该有一个容器。
此外,还有一个官方的mariadb image,它允许您将目录挂载为卷,其中可能包含SQL转储。这些转储是在创建容器时自动导入的,因此这可能会很方便。
我建议您使用docker-compose将其拆分到单独的服务中,而不是拥有一个非常大的dockerfile
但是,如果你想保持原样,我建议你将ADD init.sql ...部分移到顶部,并将服务器启动部分和转储导入连接起来,因为每个RUN命令都是Docker的一个单独的层。因此,您需要类似于此StackOverflow question的答案中描述的内容
RUN /bin/bash -c "/usr/bin/mysqld_safe &" && \
sleep 5 && \
mysql -u root -e "CREATE DATABASE mydb" && \
mysql -u root mydb < /root/init.sql以便服务器初始化并在一个层中导入转储
发布于 2017-08-18 02:34:52
这种方式是正确的:
# 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 0https://stackoverflow.com/questions/45710469
复制相似问题