Tôi đang cố gắng tải tệp docker-compose làm việc với nhiều tệp .env
và tôi không có bất kỳ may mắn nào. Tôi đang cố gắng để thiết lập ba .env
file: thiết lậpdocker-compose.yml với nhiều env_files
- toàn cầu đều giống nhau trên tất cả các trường hợp chứa
- thiết lập môi trường cụ thể (những thứ chỉ dành riêng cho thử nghiệm hoặc dev)
- thiết lập địa phương - những thứ mà overridable một nhà phát triển có thể cần phải thay đổi trong trường hợp họ có mâu thuẫn với, nói rằng, một số cổng
tập tin docker-compose.yml
của tôi trông như thế này:
version: '2'
services:
db:
env_file:
- ./.env
- ./.env.${ENV}
- ./.env.local
image: postgres
ports:
- ${POSTGRES_PORT}:5432
.env
trông như thế này:
POSTGRES_USER=myapp
và .env.development
trông như thế này:
POSTGRES_PASSWORD=supersecretpassword
POSTGRES_HOST=localhost
POSTGRES_PORT=25432
POSTGRES_DB=myapp_development
.env.local
không tồn tại trong trường hợp này.
Sau khi chạy ENV=development docker-compose up
, tôi nhận được kết quả như sau:
$ ENV=development docker-compose up
WARNING: The POSTGRES_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The POSTGRES_DB variable is not set. Defaulting to a blank string.
WARNING: The POSTGRES_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.db.ports is invalid: Invalid port ":5432", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]
Từ đó thông báo lỗi, có vẻ như không ai trong số các biến môi trường của tôi đang được sử dụng. Tôi vừa nâng cấp lên bản docker-compose mới nhất cũng như - cùng một lỗi:
$ docker-compose --version
docker-compose version 1.8.0-rc1, build 9bf6bc6
Mọi ý tưởng ở đây? Sẽ là tốt đẹp khi có một đơn docker-compose.yml
sẽ hoạt động trên nhiều môi trường.
Tô cao su ở đây - Tôi nghĩ rằng vấn đề gốc là tôi đang mong đợi các biến môi trường được khai báo trong tệp .env của tôi để có sẵn trong docker-compose.yml của tôi. Họ không (hoặc, ít nhất, tôi không tin họ là). Tôi có thể loại bỏ toàn bộ phần 'môi trường' khỏi docker-compose.yml của tôi, nhưng tôi không chắc chắn làm thế nào tôi sẽ xử lý chuyển hướng cổng vào lúc này. – matt
Bạn có tìm thấy giải pháp cho điều này không? Các tài liệu docker-compose dường như ngụ ý rằng điều này được cho phép nhưng tôi đang gặp phải cùng một vấn đề. Tôi đoán tôi không hiểu làm thế nào để làm điều này. –
Tôi đã không nhận được nó làm việc, nhưng tôi cũng hiểu tại sao nó không hoạt động - đầu tiên, tôi không cần phần 'môi trường' ở tất cả, vì các tập tin' .env' khác nhau chăm sóc đó. Thứ hai, tệp 'docker-compose.yml' sẽ không đọc trong cài đặt' env_file' - các thiết lập trong đó chỉ được chuyển đến các thùng chứa. Trong lần chạy của tôi, 'POSTGRES_PORT' không tồn tại bởi vì nó không được định nghĩa trong trình bao của tôi, bất kể thực tế là nó nằm trong tệp' .env' của tôi. – matt