[英]How to build sidekiq and rails image with docker?
我正在嘗試另一種將Rails應用程序構建到Docker映像中的方法。
我的服務結構:
我創建了兩個Dockerfile,例如:
Dockerfile.sidekiq
FROM ruby:2.2.2
ENV APP_HOME /myapp
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile $APP_HOME/Gemfile
ADD Gemfile.lock $APP_HOME/Gemfile.lock
ADD config/sidekiq.yml $APP_HOME/config/sidekiq.yml
ADD init_sidekiq.sh $APP_HOME/
RUN export LANG=C.UTF-8 && bundle install
ADD . $APP_HOME
CMD ["sh", "init_sidekiq.sh"]
init_sidekiq.sh
#!/bin/sh
bundle exec sidekiq -C config/sidekiq.yml
Dockerfile.web
FROM rails:4.2.1
ENV APP_HOME /myapp
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile $APP_HOME/Gemfile
ADD Gemfile.lock $APP_HOME/Gemfile.lock
ADD init_web.sh $APP_HOME/
RUN export LANG=C.UTF-8 && bundle install
ADD . $APP_HOME
CMD ["sh", "init_web.sh"]
init_web.sh
#!/bin/sh
bundle exec rake db:create db:migrate
bundle exec rails server -b 0.0.0.0
使用它們,我構建了兩個圖像:
然后運行以下容器:
$ docker run --name redis -d redis
$ docker run --name fluentd -d -p 24224:24224 fluent/fluentd
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=my_password -d mysql
制作環境清單
RAILS_ENV=production
DATABASE_URL=mysql2://root:my_password@172.17.0.4/myapp?checkout_timeout=20000
繼續運行以下容器:
$ docker run --name web -d -p 3000:3000 --link mysql:mysql --env-file ./env.list myapp_web
$ docker run --name sidekiq -d --link mysql:mysql --env-file ./env.list myapp_sidekiq
結果:
sidekiq日志:
$ docker logs sidekiq
Unknown database 'myapp'
/usr/local/bundle/gems/activerecord-4.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:23:in `rescue in mysql2_connection'
我使用相同的方法通過web和sidekiq連接mysql。 我相信在mysql容器中存在一個myapp
數據庫。 但是為什么找不到它呢?
使它們成為兩個容器是錯誤的方法嗎? 如何正確運行sidekiq?
我認為問題在於您如何連接到Redis? 該消息似乎來自sidekiq,並且某種程度上無法連接到您的Redis服務器。 (而且我認為嘗試連接到一些虛假的數據庫服務器/數據庫)
因此,我認為您需要將sidekiq容器鏈接到db容器和redis容器。
docker run --name sidekiq -d --link mysql:mysql --link redis:redis --env-file ./env.list myapp_sidekiq
另外,如果您可以共享您的env.list
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.