2014-02-10 154 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