Docker和MySQL无法连接

时间:2015-02-28 03:59:35

标签: mysql linux node.js ubuntu docker

我不能为我的生活弄清楚这一点。我觉得我真的很亲近,但我还没有到那里。这是我的Dockerfile:

FROM ubuntu:14.04
MAINTAINER Oscar Godson

RUN apt-get update
RUN apt-get install -y nodejs-legacy
RUN apt-get install -y npm
RUN apt-get install -y mysql-server
RUN apt-get install -y mysql-client

COPY . /src

WORKDIR /src

RUN service mysql start;\
    mysql -u root < /src/bin/demo-data.sql;\
    npm install

EXPOSE 4000

CMD ["node", "index.js"]

如果我进入交互模式并在最后的RUN service...行进入bash,我可以看到mysql正在运行,演示数据已导入,一切正常,包括使用{{1}启动我的Node应用程序}。如果我然后尝试执行另一个node index.js或您在下面看到的RUN,则无法再访问MySQL。它就像停止运行一样。

我得到的错误CMD在发生错误或数据不存在时发生。从我玩它看起来,如果我尝试在Error: connect ECONNREFUSED启动它之后访问它,MySQL似乎没有运行。

P.S。这里的MySQL DB纯粹是为了开发。在生产中我们使用AWS RDS,这就是为什么它使用root而没有任何密码并以这种方式导入数据。

1 个答案:

答案 0 :(得分:0)

问题是RUN不应该用于长时间运行的进程,但是,您只能使用一个CMD选项。出于某种原因,在朋友指出之前它并没有点击我,但我可以做一个&#34; installer.sh&#34;脚本并使用CMD调用它。现在它不会丢失MySQL上下文。我的更新Dockerfile看起来像这样:

FROM ubuntu:14.04
MAINTAINER Oscar Godson

RUN apt-get update
RUN apt-get install -y nodejs-legacy
RUN apt-get install -y npm
RUN apt-get install -y mysql-server
RUN apt-get install -y mysql-client

COPY . /src
WORKDIR /src

RUN cd /src;npm install

EXPOSE 4000

CMD ./bin/installer.sh

安装者比

service mysql start
mysql -u root < ./bin/demo-data.sql
node index.js