我是使用docker的新手,我的问题是使用mysql和docker加载一个带有环境变量的Rails4应用程序。
基本上,我构建应用程序并运行它。在另一个终端中,我创建mysql数据库和database.yml使用的user/password。以下是我运行的步骤:
$ docker-compose build
$ docker-compose up -d
$ docker exec -it poseidon_db_1 bash -l
# root@dockerimg mysql -uroot -proot
mysql> create database poseidon_development;
mysql> CREATE USER 'poseidon_user'@'localhost' IDENTIFIED BY 'poseidon_password';
mysql> CREATE USER 'poseidon_user'@'%' IDENTIFIED BY 'poseidon_password';
mysql> GRANT ALL ON poseidon_development.* TO 'poseidon_user'@'localhost';
mysql> GRANT ALL ON poseidon_development.* TO 'poseidon_user'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit
# root@dockerimg exit
$ docker-compose run web bundle exec rake db:migrate
数据库.yml
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: <%= ENV["DATABASE_USERNAME"] %>
password: <%= ENV["DATABASE_PASSWORD"] %>
database: <%= ENV["DATABASE_NAME"] %>
host: db
development:
<<: *default
test:
<<: *default
docker-compose.yml公司
version: '3.6'
services:
db:
restart: always
image: mysql:5.6.34
ports:
- "3306:3306"
volumes:
- dbdata
env_file:
- .env
dbdata:
image: tianon/true
volumes:
- /var/lib/mysql
web:
build: .
ports:
- '3000:3000'
volumes:
- webdata
links:
- "db"
env_file:
- .env
webdata:
image: tianon/true
volumes:
- ".:/var/www/poseidon"
dockerfile文件
FROM ruby:2.3.7
ENV LANG C.UTF-8
RUN apt-get update -qq
RUN apt-get install -y build-essential mysql-client vim
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_ROOT /var/www/poseidon
RUN mkdir -p $APP_ROOT
WORKDIR $APP_ROOT
COPY . $APP_ROOT
RUN chmod a+x .env
EXPOSE 3000
ENTRYPOINT ["bundle", "exec"]
CMD ["rails", "server", "-p", "3000", "-b", "0.0.0.0"]
.环境
SECRET_KEY_BASE=xxxxxxxx
RAILS_ENV=development
RAILS_SERVE_STATIC_FILES=true
URL_OPTIONS=domain.com
RECAPTCHA_SECRET_KEY=xxxxxxx
RECAPTCHA_SITE_KEY=xxxxxxx
MAILGUN_API=xxxxxx
MAILGUN_DOMAIN=xxxxxxx
MYSQL_ROOT_PASSWORD=root
DATABASE_USERNAME=poseidon_user
DATABASE_PASSWORD=poseidon_password
DATABASE_NAME=poseidon_development
问题是,当访问 http://127.0.0.1
,我收到 Access denied for user '<%= ENV["DATABASE_USERNAME"] %>'@'IP' (using password: YES)
我不知道该怎么做了,它似乎没有加载环境变量正确。
任何帮助都将不胜感激!
当做
1条答案
按热度按时间fbcarpbf1#
我在这个问题上被难住了一两天。在docker外一切正常,但由于某种原因,容器内的erb没有被解析。
这篇文章似乎有帮助:rails database.yml不接受erb(我通过rails发现erb不能替换database.yml中env的值)
我也经历了同样的事情,看到了你的帖子。我一直在遵循一个教程,该教程让我创建一个puma.conf文件,其中包含以下代码:
我修改了以下内容,一切正常: