2014-02-10 155 views
6

我想用下面搬运工文件上搬运工容器安装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 [email protected]'%'" >/etc/mysql/init 

USER root 

EXPOSE 3306 

运行MySQL进入修改ubuntu的图像,其模块主要包括Node.js的的安装和基本mysql安装使用下面的命令运行该服务器

遇到
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应用程序。

+0

我想你需要添加'-d'才能使它在守护进程模式下运行?不知道 – Gohn67

+0

添加-d工作并打开端口11211,但它在10秒后失效。任何想法为什么? – Hitesh

+0

我不知道你如何使用这个容器 - 你公开了memcached端口,你正在运行mysql服务器并安装mysql客户端?你想从外部/主机连接到你的mysql服务器(在docker容器中)吗?那么你应该公开mysql端口。 – Jiri

回答

2

UPDATE:你应该检查暴露的端口号 - 在你的例子中是memcached(11211)的端口号,而不是mysql的端口号(3306)。


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

ENTRYPOINT ["/usr/bin/mysqld_safe"] 

那么你应该开始你的容器这种方式(daemon模式):

[email protected]:/# docker run -d -p 3306:<host port> <image id> 
+0

尝试相同。 dint解决了。港口在10秒后死亡。 – Hitesh

+0

无论如何,我试图建立码头图像与我的修改没有睡眠,它运作良好。我可以从主机连接到mysqld,没有任何问题。 – Jiri

+0

感谢Jiri指出这一点,这里的睡眠只是确保mysqld_safe完成,这可能不是必要的,正如你指出的那样。我的问题是因为在现在排序的memcache和mysql端口之间搞砸了。 – Hitesh

2

答案已被接受,但我认为如果您将“&”更改为“&”'。不知道docker是否对入口点进行任何解析或者只是执行它,但bash将'&'与'& &'非常不同。

ENTRYPOINT mysqld_safe && sleep 10