【发布时间】:2016-01-23 09:22:00
【问题描述】:
我一直致力于在单个容器中设置一个独立的 Rails 应用程序。这意味着在一个容器中同时运行 Rails 和数据持久性服务。在我们的例子中,这意味着 mysql。
但是,我遇到了多个问题,因为 mysql 没有运行。
在构建步骤期间,如果我有 RUN mysqld 和单独的 RUN rake db:create 步骤,rake 会崩溃,因为 mysql 已关闭。
所以我通过将两个命令包装到一个脚本中来解决这个问题。但是,在运行时,rails 将无法启动,因为 mysql 没有运行。
我的直觉说,如果在构建过程中启动了mysql,它应该在运行时可用,但我没有那种经验。启动 Rails 服务器必须包含在另一个调用 mysqld 的脚本中。
这是 dockerfile:
FROM ruby:2.2
RUN mkdir -p $APPDIR
WORKDIR $APPDIR
ADD Gemfile* $APPDIR/
RUN bundle install
RUN apt-get update -qq
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -qq nodejs mysql-server --no-install-recommends
RUN rm -rf /var/lib/apt/lists/* # */ broken syntax highlighting
COPY . $APPDIR
RUN script/mysql-setup.sh # contents are: mysqld_safe; rake db:create; rake db:migrate
EXPOSE 3000
CMD ["script/rails-launcher.sh"] # contents are: mysqld_safe; rails s
我需要在 Dockerfile 中做一些不同的事情吗?为什么mysql在运行时没有启动?
【问题讨论】:
-
我在 dockerfile 中遗漏了一行:
ENV APPDIR /usr/src/app
标签: mysql ruby-on-rails docker debian