我不能为我的生活弄清楚这一点。我觉得我真的很亲近,但我还没有到那里。这是我的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而没有任何密码并以这种方式导入数据。
答案 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