![](/img/trans.png)
[英]rails application on docker-compose: db:migration shows "Permission denied"
[英]Dockerizing a Rails application with docker-compose
嗨,我正在嘗試使我的應用程序適應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
嘗試
chmod +x /usr/src/my-app/docker-entrypoint.sh
確保您的入口點是可執行文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.