Жорстке кодування IP у файл конфігурації - це не дуже добре. Що з іншими дияволами? Що робити, якщо ip зміниться?
Конфігурація, пов’язана з Docker, не повинна просочуватися в програму рейки, коли це можливо. Ось чому ви повинні використовувати env vars у config/environments/development.rb
файлі:
class Application < Rails::Application
# Check if we use Docker to allow docker ip through web-console
if ENV['DOCKERIZED'] == 'true'
config.web_console.whitelisted_ips = ENV['DOCKER_HOST_IP']
end
end
Ви повинні встановити правильні env vars у .env
файлі, не відслідковуючись до контролю версій.
У docker-compose.yml
ви можете надати окр вари з цього файлу з env_file
:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
Спираючись на коментар, отриманий в коментарях, ми також можемо створити рішення без змінних середовищ:
class Application < Rails::Application
# Check if we use Docker to allow docker ip through web-console
if File.file?('/.dockerenv') == true
host_ip = `/sbin/ip route|awk '/default/ { print $3 }'`.strip
config.web_console.whitelisted_ips << host_ip
end
end
Я залишу рішення з env var для навчальних цілей.
config/environments/development.rb
, @ydaetskcoR