Codificar una IP en un archivo de configuración no es bueno. ¿Qué hay de otros desarrolladores? ¿Qué pasa si la ip cambia?
La configuración relacionada con Docker no debe filtrarse en la aplicación rails siempre que sea posible. Es por eso que debe usar env vars en el config/environments/development.rb
archivo:
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
Debe configurar los valores correctos de env en un .env
archivo, sin seguimiento en el control de versiones.
En docker-compose.yml
usted puede inyectar env vars de este archivo con env_file
:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
Según el feebdack recibido en los comentarios, también podemos construir una solución sin variables de entorno:
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
Dejaré las soluciones con env var para fines de aprendizaje.
config/environments/development.rb
, @ydaetskcoRENV.fetch('SSH_CLIENT', '127.0.0.1').split(' ').first
. En general, esto probablemente será 10.0.2.2, pero debería reflejar cualquier configuración de red activa (vagabunda o no, realmente, que por supuesto puede o no ser lo que desea).config.web_console.whitelisted_ips
. El segundo son los mensajes de error que está viendo en sus registros. Esto es controlado porconfig.web_console.whiny_requests
. Finalmente, y este fue el problema que enfrenté, el error Ip de la lista blanca se debió a que los rieles intentaban representar la consola como un mecanismo predeterminado para manejar otro error. Por lo tanto, solucionar el otro error o cambiar el valor predeterminado también debería ayudar.