![](/img/trans.png)
[英]Docker-compose: Set a variable in env file and use it in Dockerfile
[英]Defining ENV variables in a Dockerfile that is used in a docker-compose file
我的情況如下,我有一個具有這種結構的項目:
project/
|
|______docker-compose.yml
|______database/
|______Dockerfile
|______webapp/
|______Dockerfile
我的問題是database
容器的構建。 我的database/Dockerfile
如下:
FROM mysql:8.0.3
ENV MYSQL_ROOT_PASSWORD=secret
ENV MYSQL_DATABASE=clients
EXPOSE 3306
我docker-compose.yml
文件如下所示:
version: "3"
services:
database-server:
build: ./database
ports:
- 3306:3306
如上所述,我在Dockerfile
定義了我的ENV
變量( MYSQL_ROOT_PASSWORD
和MYSQL_DATABASE
),因此我希望在使用docker-compose
時在構建期間使用它們。 但他們沒有!
我使用Dockerfile
和Dockerfile
docker build
命令在project/database
中手動構建容器時,才會使用我的ENV
變量。
Dockerfile
|
|
| [Variables are available here]
|
|
docker-compose.yml
|
|
| [Variables are NOT available here]
|
docker run
有可能做我想做的事嗎? 我想在它的Dockerfile
定義與特定容器相關的Dockerfile
,並保持docker-compose.yml
來定義容器之間的關系和鏈接。
謝謝!
UPDATE
正如@Tim所問,這是我的docker docker-compose up
的輸出:
Starting root_database-server_1 ... done
Starting root_webapp_1 ... done
Attaching to root_database-server_1, root_webapp_1
database-server_1 | error: database is uninitialized and password option is not specified
database-server_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
...
... Rest of the log is fine..
沒有必要為此目的構建本地映像。
version: '3'
services:
database-server:
image: mysql:8.0.3
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: clients
它記錄更好,更易於維護。
我懷疑docker-compose正在使用比您期望的更新圖像更舊的圖像。 嘗試這個:
docker-compose down
停止並刪除堆棧中使用的任何現有容器。 如果所有內容都已停止,您可以使用docker-compose rm
。
docker-compose build
使docker-compose在yml文件中使用構建方向重建所有內容。
docker-compose up
以重新啟動堆棧。 docker-compose應該使用ENV集合來獲取新構建的database-server
映像。
You can use them like this:
version: "3"
services:
database-server:
build: ./database
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD_VARIABLE_FOR_DOCKER_ENV=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE_VARIABLE_FOR_DOCKER_ENV=${MYSQL_DATABASE}
更新:在您的情況下,您可以輕松地做到:
environment:
- MYSQL_ROOT_PASSWORD_VARIABLE_FOR_DOCKER_ENV=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE_VARIABLE_FOR_DOCKER_ENV=${MYSQL_DATABASE}
然而,正如安德烈亞斯所說,保持他們在碼頭工作室的構成更加整潔。 除非這些值經常變化。 我懷疑密碼就是這種情況
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.