如何在Docker容器中启动MySQL服务器

24

我正在创建一个Docker容器,基础镜像是ubuntu:14.04。我需要在容器内启动mysql服务器,然后创建数据库并授予权限。Docker对我而言是新的。我已经尝试了很多次,但每次当我进入该镜像并检查mysql服务器是否正在运行时,我都会得到mysql服务器已停止且我的数据库也未被创建的结果。

这是我的Dockerfile:

FROM ubuntu:14.04
MAINTAINER <name> <emailid>
RUN sudo apt-get update
RUN sudo apt-get install -y apache2 mysql-server libapache2-mod-auth-mysql php5-mysql php5 git
RUN sudo apt-get install -y vim
CMD sudo /usr/sbin/mysqld -u mysql

我尝试了很多次,但无法在Docker镜像中运行MySQL服务器。


2
你是否遵循了官方 MySQL Docker Hub 页面上描述的指示? - Henrik Sachse
1
我不明白。我在容器中安装了mysql,然后执行了CMD sudo service mysql restart,为什么它没有启动SQL服务器?我还按照“https://dev59.com/kV8e5IYBdhLWcg3w_-r0”进行了操作,但仍然是同样的情况。 - Mark Taylor
你有读过Docker用户指南吗?任何以CMD开头的内容都必须是一个持续运行的进程,例如:"while true; do date; sleep 10; done",或者"/usr/sbin/apache2ctl -D FOREGROUND",或者"/usr/sbin/mysqld -u mysql"。仅仅运行"service mysqld restart"将只会重新启动服务并返回,这样Docker容器就会停止。 - mgor
mgor,我已经做了这个,但mysql仍然没有运行。 - Mark Taylor
1
分享你的 Dockerfile。 - mgor
3个回答

24

你在容器中手动安装了它吗?

为什么不直接使用:

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mySchema mysql:5

这将启动一个名为mysql的容器,运行MySQL守护进程,将默认根密码设置为secret,创建一个名为mySchema的新模式,并将MySQL端口3306暴露给客户端,以便他们可以连接。

然后,您可以使用指定的密码secret使用任何MySQL客户端连接到该容器,并在创建的模式mySchema中创建表格。


我也尝试了,它卡在这里 150810 11:43:38 [注意] - '0.0.0.0' 解析为 '0.0.0.0'; 150810 11:43:38 [注意] 服务器套接字已创建在 IP: '0.0.0.0'。 150810 11:43:38 [注意] 事件调度程序:已加载 0 个事件 150810 11:43:38 [注意] mysqld:已准备好连接。 版本:'5.5.45' 套接字:'/tmp/mysql.sock' 端口:3306 MySQL Community Server (GPL) - Mark Taylor
你尝试连接它了吗?它显示“准备好连接”。 - Henrik Sachse
为什么我要创建一个新的容器。我必须创建一个需要此操作的映像,然后在部署该映像之后。在创建该映像的同时启动SQL并创建数据库和其他内容是否不可行? - Mark Taylor
请问您能否提供您的电子邮件地址,这样我就可以与您聊天讨论我的问题了。 - Mark Taylor
1
即使我这样做了,那么MySQL守护进程正在我的本地机器上运行,部署的镜像如何通信? - Mark Taylor
显示剩余2条评论

3

我在使用Docker容器设置Druid集群时,在Ubuntu:14.04上遇到了类似的问题。使用CMD启动mysql可以解决这个问题。

CMD mysql start \

与Druid有关的内容

&& mysql stop

2

docker exec -it container_name/id bash
service mysql status 用于检查服务状态
service mysql start 用于启动mysql服务


1
Docker中的服务?Docker中没有后台进程,这是其架构的一部分。 - Paul Allsopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接