Mã hóa IP thành tập tin cấu hình không tốt. Còn các nhà phát triển khác thì sao? Nếu ip thay đổi thì sao?
Cấu hình liên quan đến Docker không nên rò rỉ vào ứng dụng rails bất cứ khi nào có thể. Đó là lý do tại sao bạn nên sử dụng env vars trong config/environments/development.rb
tệp:
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
Bạn nên đặt các lọ env chính xác trong một .env
tệp, không được theo dõi trong kiểm soát phiên bản.
Trong docker-compose.yml
bạn có thể tiêm env vars từ tệp này với env_file
:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
Dựa trên các thông tin nhận được trong các nhận xét, chúng tôi cũng có thể xây dựng một giải pháp mà không cần các biến môi trường:
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
Tôi sẽ để lại các giải pháp với env var cho mục đích học tập.
config/environments/development.rb
, @ydaetskcoR