2014-02-10 10 views
6

Я пытаюсь запустить MySQL в модифицированном Ubuntu образ, который станы установку Node.js и базовую установку MySQL, используя ниже Docker файлустановка 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 [email protected]'%'" >/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.

+0

Я думаю, вам нужно добавить '-d', чтобы он запускался в режиме демона? Не уверен, хотя – Gohn67

+0

Добавление -d обработано и открыл порт 11211, но он снизился через 10 секунд. любая идея почему? – Hitesh

+0

Я не уверен, как вы используете этот контейнер - вы открываете порт memcached, вы используете сервер mysql и устанавливаете клиент mysql? Вы хотите подключиться к вашему серверу mysql (в контейнере докера) извне/хост? Затем вы должны открыть порт mysql. – Jiri

ответ

2

ОБНОВЛЕНИЕ: Вы должны проверить выставленный номер порта - в вашем примере есть (был) порт для memcached (11211), а не порт для mysql (3306).


Во всяком случае, я думаю, что вам, возможно, придется изменить свой Dockerfile - удалить ненужный сон в EntryPoint:

ENTRYPOINT ["/usr/bin/mysqld_safe"] 

Затем вы должны начать свой контейнер таким образом (режим демона):

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

попробовал то же самое. сработало. порт умер через 10 секунд. – Hitesh

+0

Во всяком случае, я попытался построить изображение докера с моей модификацией без сна, и он работает хорошо. Я могу подключиться к mysqld от хоста без проблем. – Jiri

+0

Спасибо, Jiri, чтобы указать на это, Sleep здесь просто гарантирует, что mysqld_safe будет сделано, что может не понадобиться, как вы указали. Моя проблема возникла из-за переполнения между портами memcache и mysql, которые теперь сортируются. – Hitesh

2

Ответ уже принят, но я думаю, что вы можете оставить сон в своей точке входа, если вы измените «&» на «& & '. не уверен, что докер выполняет любой синтаксический анализ точки входа или просто выполняет его, но bash рассматривает «&» совсем по-другому, чем «& &».

ENTRYPOINT mysqld_safe && sleep 10 
Смежные вопросы