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



我一直在玩耍,将现有的Ruby在docker容器中开发的Rails应用程序上。我不明白最好地合并rake rails:update:bin命令。我试图将其视为Dockerfile的最后一行,但容器无法正常启动。我可以让容器启动的唯一方法是在图像构造的外部构建垃圾箱,以便使用添加命令将bin文件夹拉入。

是否可以创建一个做所有事情的码头?


docker文件看起来像

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命令时,我将在MyApp文件夹中没有bin文件夹的情况下重建图像。当我关闭rake命令时,我将使用bin文件夹重建图像。我知道我真的在重建图像,因为我在重建它们之前删除了缓存的版本。

我终于在这里找到了一个分辨率。在服务器启动之前,我将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@sessions*requireds*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进行调试。

相关内容

最新更新