嗨,我正在尝试使我的应用程序适应docker。
我的应用程序堆栈是
我创建了一个
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
关于ruby-on-rails - 使用docker-compose对Rails应用程序进行Docker化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47435589/