使用docker-compose来Docker化Rails应用程序

嗨,我正在尝试将我的应用程序调整为泊坞窗。

我的应用程序堆栈是

  • Ruby 2.4.0
  • Rails 5.0.1
  • Postgres 9.5.8

我创build了一个Dockerfile来创build一个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 

然后我创build了一个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,build议将是wellcome

你DATABASE_URL不能是本地主机,它需要是服务的名称。 这里还需要用户名和密码:

 postgres://postgres:postgres@postgres/postgres 

它不需要发布,因为它使用默认值。 以下是URL的示例: https : //stackoverflow.com/a/20722229/749924

尝试

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

确保你的入口点是一个可执行文件