簡體   English   中英

使用docker-compose對Rails應用程序進行Docker化

[英]Dockerizing a Rails application with docker-compose

嗨,我正在嘗試使我的應用程序適應docker。

我的應用程序堆棧是

  • Ruby 2.4.0
  • Rails 5.0.1
  • Postgres 9.5.8

我創建了一個Dockerfile來創建my-app的映像

FROM ruby:2.4

RUN apt-get update && apt-get install -y \
    software-properties-common \
    python-software-properties \
    build-essential \
    libpq-dev \
    libxml2-dev libxslt1-dev \
    libqt4-webkit libqt4-dev xvfb \
    nodejs \
    postgresql

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app
COPY Gemfile.lock /usr/src/app
RUN bundle install
ADD . /usr/src/app
COPY ./docker/docker-entrypoint.sh /usr/src/app/docker-entrypoint.sh
RUN chmod +x /usr/src/app/docker-entrypoint.sh
RUN bundle install

然后我創建了一個docker-compose.yml

version: '3'
services:

  app:
    image: app_rails
    entrypoint: ['/usr/src/app/docker-entrypoint.sh']
    ports:
      - "3000:3000"
    depends_on:
      - postgres
    links:
      - postgres
    volumes:
      - .:/usr/src/app
    environment:
      DATABASE_URL: postgres://postgres@postgres@postgres:5432/postgres?pool=5&encoding=utf-8

  postgres:
    image: postgres:9.5.8
    ports:
     - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres

這是腳本docker-entrypoint.sh

#!/bin/sh
set -e

host="$1"
echo "host: ${host}"

if [ "$#" -gt 0 ]; then shift; fi

until psql -h "$host" -U "postgres" -c '\q'; do
  >&2 echo "Postgres is unavailable - sleeping"
  sleep 1
done

rails db:create
rails db:migrate RAILS_ENV=development

bundle exec rails server -b 0.0.0.0

exec "$@"

和我的database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: postgresql
  pool: 5
  timeout: 5000

development:
  adapter: postgresql
  database: app_development
  pool: 5
  timeout: 5000
  url: postgres://postgres@postgres/postgres:5432

test:
  adapter: postgresql
  database: app_test
  pool: 5
  timeout: 5000

production:
  adapter: postgresql
  database: app_production
  pool: 5
  timeout: 5000

我在運行腳本時遇到問題

web_1       |   connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
web_1       | Postgres is unavailable - sleeping

由於我是Docker的新手,所以建議會很受歡迎

您是DATABASE_URL,不能是localhost,它必須是服務名稱。 還需要在其中輸入用戶名和密碼:

postgres://postgres:postgres@postgres/postgres

它使用默認值,因此無需發布。 以下是URL的示例: https : //stackoverflow.com/a/20722229/749924

嘗試

chmod +x /usr/src/my-app/docker-entrypoint.sh

確保您的入口點是可執行文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM