更新docker容器的Ruby bin文件夹的正确方法是什么?

时间:2017-03-03 20:39:07

标签: ruby-on-rails docker rake docker-compose dockerfile

我一直在努力将现有的Ruby on Rails应用程序转换为在docker容器中开发。我不明白在哪里最好地合并 <system.net> <mailSettings> <smtp deliveryMethod="Network" from="12347@yahoo.com"> <network host="mail.xxxx.com" port="587" defaultCredentials="false" userName="name@xxxx.com" password="password" enableSsl="false"/> </smtp> </mailSettings> </system.net> 命令。我试图将它作为dockerfile的最后一行,但容器不能正常启动。我可以启动容器的唯一方法是在图像构造之外构建bin,以便使用ADD命令拉入bin文件夹。

是否可以创建一个可以完成所有工作的dockerfile?

Docker文件看起来像这样

rake rails:update:bin

我想在最后添加以下行。

FROM ruby:2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs
RUN mkdir /MyApp
WORKDIR /MyApp
ADD Gemfile /MyApp/Gemfile
ADD Gemfile.lock /MyApp/Gemfile.lock
RUN bundle install
ADD . /MyApp

当我尝试包含RUN rake rails:update:bin 命令时,我在rake文件夹中没有bin文件夹的情况下重建图像。当我离开MyApp命令时,我使用rake文件夹重建图像。而且我知道我真的正在重建图像,因为我在重建之前删除了缓存的版本。

1 个答案:

答案 0 :(得分:0)

我终于在这里找到了一个决议。我在服务器启动之前添加了rake rails:update:bin调用命令。

我创建了以下shell脚本来设置为docker-compose.yml命令

#!/bin/bash

rake rails:update:bin

# start the SSH server for connecting the debugger in development
/usr/sbin/sshd -D &
bundle exec rails s -p 3000 -b '0.0.0.0'

我的docker-compose.yml看起来像这样

version: '2'
services:
  web:
    build: .
    command: /MyApp/docker-dev-start.sh
    volumes:
      - .:/MyApp
    ports:
      - "3000:3000"
      - "3022:22"

我的dockerfile最终看起来像这样

FROM ruby:2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    openssh-server

RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

RUN mkdir /MyApp
WORKDIR /MyApp
ADD Gemfile /MyApp/Gemfile
ADD Gemfile.lock /MyApp/Gemfile.lock
RUN bundle install
ADD . /MyApp

包含SSH服务器,以便能够连接外部IDE进行调试。