【问题标题】:Docker and MySQL can't connectDocker和MySQL无法连接
【发布时间】:2015-04-30 22:12:12
【问题描述】:

我这辈子都想不通。我觉得我真的很接近,但我只是还没有到那里。这是我的 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 正在运行,演示数据已导入并且一切正常,包括使用 node index.js 启动我的 Node 应用程序。如果我再尝试做另一个RUNCMD 你在下面看到它不再可以访问MySQL。就像它停止运行一样。

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

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

【问题讨论】:

    标签: mysql linux node.js ubuntu docker


    【解决方案1】:

    问题是RUN 不应该用于长时间运行的进程,但是,您只能使用一个CMD 选项。出于某种原因,在朋友指出之前它没有点击我,但我可以制作一个“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
    

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2018-10-10
      • 2018-10-02
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      相关资源
      最近更新 更多