我有一個 docker-compose.yml:
services:
backend:
build:
./backend
ports:
- 8100:8100
container_name: "backend"
frontend:
build:
./frontend
ports:
- 4200:4200
container_name: "frontend"
depends_on:
- backend
我想擺脫埠部分。我在檔案夾/backend 和/frontend 中有.env 檔案,其中設定了埠號(例如PORT=8100)。在 dockerfile 中,我可以執行 Export ${PORT}。但由于我無法從 docker-compose 位置讀取 .env,我無法以相同的方式公開埠。是否可以只使用通配符將容器的埠公開到我主機上的同一埠,例如:
ports:
- *:*
uj5u.com熱心網友回復:
不,沒有這樣的語法。該ports:
語法始終要求您指定容器端埠,ports:
如果您希望容器可以從 Docker 外部訪問,則必須有一個塊。
如果您沒有使用 Compose,則有一個docker run -P
(capital P
) 選項,但容器埠在隨機選擇的主機埠上發布。(這是將“暴露”作為 Docker 動詞做任何有用的少數情況之一:docker run -P
發布所有暴露的埠。)
但是:沒有規定兩個埠號必須匹配。與其在 Dockerfile 中配置埠號(任何更改都需要重新構建),更常見的是在映像中使用固定埠號并允許在部署時配置主機埠號。
例如,假設兩個鏡像都配置為使用默認的 Express 埠 3000。您可以在運行容器時重新映射它們:
version: '3.8'
services:
backend:
build: ./backend
ports: ['8100:3000']
frontend:
build: ./frontend
depends_on: [backend]
ports: ['4200:3000']
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505085.html