mysql - Docker和MySQL无法连接

标签 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"]

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

我收到的错误Error: connect ECONNREFUSED当它宕机或者数据不存在时就会发生这种情况。从我的角度来看,如果我尝试在RUN之后访问它,MySQL似乎没有运行。我从哪里开始。

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

最佳答案

问题是 RUN 不应该用于长时间运行的进程,但是,您只能使用一个 CMD 选项。由于某种原因,直到一位 friend 指出它才让我满意,但我可以制作一个“installer.sh”脚本并使用 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

关于mysql - Docker和MySQL无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777946/

相关文章:

linux - 如果文件不存在,如何创建它的完整路径?

javascript - 从 HTML 转换后 EJS 导致渲染错误

javascript - Reactjs 和 Nodejs 在 VS Code 中的通信

angularjs - 下载从nodejs传递到前端angularjs的xlsx文件

C# txt 文件配置中的 Mysql 连接

php - 根据时间连接到mysql表

javascript - 不同的操作系统对显示网页有多大影响?

java - 在 JPA 或 Hibernate 查询中使用 Constructor Result 会影响性能吗?

php mysql 从数组插入值

linux - memory.oom_control 哪个版本是 Linux 内核的一部分?