Codificar um IP em um arquivo de configuração não é bom. E os outros desenvolvedores? E se o ip mudar?
A configuração relacionada ao Docker não deve vazar para o aplicativo rails sempre que possível. É por isso que você deve usar env vars no config/environments/development.rb
arquivo:
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
Você deve definir envios corretos em um .env
arquivo, não rastreados no controle de versão.
Em docker-compose.yml
você pode injetar env vars deste arquivo com env_file
:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
Com base no feebdack recebido nos comentários, também podemos criar uma solução sem variáveis de ambiente:
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
Deixarei as soluções com env var para fins de aprendizado.
config/environments/development.rb
, @ydaetskcoR