我正在使用 docker compose 來設定應用程式環境。有兩個不同的環境,測驗和生產。
在測驗環境中,我需要公開額外的埠(用于除錯)。這些埠在生產環境中應保持關閉。
我也想使用相同的影像和docker-compose.yml檔案。使用相同的影像沒有問題,但我正在努力處理撰寫檔案。在其中,我想根據環境變數打開或關閉埠。
當前的設定幾乎是標準的,如下所示:
# ...
ports:
- "8080:8080" # HTTP Server port
- "9301:9301" # debug port
# ...
在此示例中,兩個埠始終是公開的。9301是否只有在設定了某個環境變數時才可以公開埠EXPOSE_DEBUG?
uj5u.com熱心網友回復:
您可以使用組態檔或第二個撰寫檔案。
services:
app-prod:
&app
image: busybox
profiles:
- production
ports:
- 8080:8080
app-dev:
<<: *app
profiles:
- development
ports:
- 8080:8080
- 9090:9090
然后您可以使用以下命令或環境變數來設定組態檔,COMPOSE_PROFILES.
docker compose --profile <profile-name> up
或者,您可以使用第二個撰寫檔案并覆寫埠。
# compose.yaml
services:
app:
image: busybox
ports:
- 8080:8080
# compose.dev.yaml
services:
app:
ports:
- 8080:8080
- 9090:9090
然后你可以使用主檔案后面的檔案來修補它:
docker compose -f compose.yaml -f compose.dev.yaml up
要使用的檔案也可以是帶有環境變數、的控制元件COMPOSE_FILE。
您還可以將除錯埠系結到環回介面,以便您只能在本地訪問它。
ports:
- 8080:8080
- 127:0.0.1:9090:9090
uj5u.com熱心網友回復:
docker-compose.yml我通常在我的專案中使用的解決方案是制作一個 bash 腳本,它根據環境變數的值撰寫. 但是您也可以使用任何其他編程語言撰寫它。
uj5u.com熱心網友回復:
if elsedocker compose 不支持條件陳述句 ( )。
- 使用 jinja-compose 等附加軟體將 Jinja2 邏輯添加到 docker-compose
- 僅使用兩個不同的檔案(dc-dev.yml 和 dc-prod.yml)并將它們作為 arg (
docker compose -f) docker-compose.yml自己以編程方式生成- 使用組態檔(要慢,見傻瓜的回答)
在我看來,僅維護開發/生產環境,解決方案 2 在作業量方面是最有效的。
遵循您的方法:
您可以通過 env 設定埠映射,例如:
.envdocker compose up -e-檔案或在命令中添加它們
PORT1="8080:8080"
PORT2="9301:9301"
docker-compse.yml
services:
container1:
ports:
- ${PORT1}
- ${PORT2}
但是afaik沒有辦法省略其中之一
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/471210.html
下一篇:AWSECS前端和后端通信
