在Docker容器上安装Mysql

我想运行mysql到修改的Ubuntu映像,其中包括安装Node.js和基本的MySQL安装使用下面的docker文件

# Memcached # use the ubuntu base image provided by dotCloud FROM ubuntu/mysqlbase MAINTAINER Hitesh # make sure the package repository is up to dat//e #RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list #RUN apt-get update #RUN apt-get install -y mysql-client #ENTRYPOINT ["wc", "-l"] #ENTRYPOINT ["echo", "running"] ENTRYPOINT mysqld_safe & sleep 10 #RUN mysql RUN echo "[mysqld]" >/etc/mysql/conf.d/docker.cnf RUN echo "bind-address = 0.0.0.0" >>/etc/mysql/conf.d/docker.cnf RUN echo "innodb_flush_method = O_DSYNC" >>/etc/mysql/conf.d/docker.cnf RUN echo "skip-name-resolve" >>/etc/mysql/conf.d/docker.cnf RUN echo "init_file = /etc/mysql/init" >>/etc/mysql/conf.d/docker.cnf RUN echo "GRANT ALL ON *.* TO root@'%'" >/etc/mysql/init USER root EXPOSE 3306 

使用下面的命令运行此服务器

 sudo docker run -p 3306:13306 mysql/dockerfiletest 

遇到以下错误

 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

有人可以build议在这里需要改变什么。 我想使用这个容器与其他容器,这是本质上运行我的node.js应用程序链接。

更新:你应该检查暴露的端口号 – 在你的例子是(是)端口为memcached(11211),而不是mysql的端口(3306)。


无论如何,我认为你可能需要修改你的Dockerfile – 在入口点删除不必要的睡眠:

 ENTRYPOINT ["/usr/bin/mysqld_safe"] 

那么你应该这样启动你的容器(守护进程模式):

 root@machine:/# docker run -d -p 3306:<host port> <image id> 

答案已经被接受了,但是如果你把'&'改成'&&',我想你可以把睡眠留在你的入口点。 不知道docker是否对入口点进行了任何parsing或者只是执行它,但是bash将'&'和'&&'的处理方式非常不同。

 ENTRYPOINT mysqld_safe && sleep 10