将IP硬编码到配置文件中是不好的。那其他开发者呢?如果IP改变怎么办?
尽可能不将与Docker相关的配置泄漏到rails应用程序中。这就是为什么您应该在config/environments/development.rb
文件中使用env vars的原因:
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
文件中,而不是在版本控制中进行跟踪。
在其中,docker-compose.yml
您可以使用以下命令从该文件中注入env var env_file
:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
根据评论中收到的Feebdack,我们还可以构建一个没有环境变量的解决方案:
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