在docker容器上安装Mysql

在docker容器上安装Mysql,mysql,docker,Mysql,Docker,我正在尝试将mysql运行到修改后的ubuntu映像中,其中包括Node.js的安装和使用下面的docker文件的基本mysql安装 # 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

我正在尝试将mysql运行到修改后的ubuntu映像中,其中包括Node.js的安装和使用下面的docker文件的基本mysql安装

# 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)

有人能建议一下这里需要改变什么吗。我想使用此容器与其他基本上运行node.js应用程序的容器链接。

更新:您应该检查公开的端口号-在您的示例中,是memcached(11211)的(was)端口,而不是mysql(3306)的端口


无论如何,我认为您可能需要修改Dockerfile-删除entrypoint中不必要的睡眠:

ENTRYPOINT ["/usr/bin/mysqld_safe"]
然后,您应该以这种方式启动容器(守护程序模式):

root@machine:/#docker run-d-p 3306:

答案已被接受,但我认为如果您将“&”改为“&&”,您可以将睡眠留在入口点。不确定docker是否对入口点进行任何解析或只是执行它,但bash对“&”的处理与对“&&”的处理非常不同

ENTRYPOINT mysqld_safe && sleep 10

我认为您需要添加
-d
以使其在守护程序模式下运行?不确定thoughAdding-d是否工作并打开了端口11211,但它在10秒后关闭。你知道为什么吗?我不知道你是如何使用这个容器的-你正在公开memcached端口,你正在运行mysql服务器并安装mysql客户端?是否要从外部/主机连接到mysql服务器(在docker容器中)?您应该公开mysql端口,但它与端口混淆了。现在更正。@Jiri:当我更正端口时,这实际上起了作用。如果你能把答案贴在网上,我很乐意接受。谢谢不管怎样,我尝试在不睡觉的情况下通过修改来构建docker图像,效果很好。我可以毫无问题地从主机连接到mysqld。感谢Jiri指出的这一点,这里的睡眠只是确保mysqld_安全完成,这可能不像您指出的那样是必要的。我的问题是因为memcache和mysql端口之间的混乱,现在已排序。我很困惑,该命令是否会将本地主机上的端口3306公开给容器上的端口?如果要通过本地主机连接到容器上运行的MySQL,容器上的3306端口不应该转发到主机上的某个端口吗?@Mark Yep,你是对的,第一个端口是主机端口,第二个端口是容器端口。有几件事:这是“竞争条件”,我不是说睡眠可以解决问题。我(正确地)指出,
&
可能不是OP想要的——为此,他应该使用
&
好的,我同意
ENTRYPOINT mysqld_safe && sleep 10