[英]How can I add a file to a volume in a Docker image, using values from the docker-compose.yml?
我有這個.env 文件:
admin=admin
password=adminsPassword
stackName=integration-demo
其值在 docker-compose.yml 文件中使用,如下所示:
myService:
build:
context: .
dockerfile: myService.Dockerfile
args:
- instance=${stackName}.local
- admin=${admin}
- password=${password}
volumes:
- ./config:/config
我想將它們添加到 Docker 撰寫文件中,如下所示:
FROM openjdk:8-jdk-alpine
ARG docker_properties_file=Username=$admin\nPassword=$password\nHost=$instance
RUN $docker_proprties_file >> config/gradle-docker.properties
這樣我就有一個 gradle-docker.properties 文件,如下所示:
username=admin
password=adminsPassword
host=integration.demo.local
在 /config 目錄中。
但是,沒有寫入 gradle-docker.properties 文件。
如何使用 docker-compose.yml 文件中的變量將數據添加到卷?
實現目標的一種方法是在主機上創建${PWD}/config/grade-docker.properties
文件,其中${PWD}/docker-compose.yml
... ${PWD}
為清楚起見。
然后,您現有的volumes
屬性將在運行時將此文件 map 放入容器中,並將其放置在容器的/config
中。
普通 Docker 和 Docker Compose 沒有此功能。 您可以在主機上的 Docker 之外創建文件並將其安裝到容器中,但 Docker 和 Compose 都沒有您需要能夠執行此操作的模板功能。
您在問題中描述的整體方法為每組配置選項構建了一個自定義圖像。 這並不是一個真正的最佳實踐:想象一下需要重新編譯ls
因為您附加了一個需要查看的 USB 驅動器。
您可以在普通 Docker 中做的一件事是教映像如何在啟動時創建自己的配置文件。 您可以使用以下腳本執行此操作,例如:
#!/bin/sh
# I am docker-entrypoint.sh
# Create the config file
cat >config/gradle-docker.properties <<EOF
username=$USERNAME
et=$CETERA
EOF
# Run the main container process
exec "$@"
在您的 Dockerfile 中,將此文件COPY
到圖像中並將其設置為ENTRYPOINT
; 保持CMD
不變。 您必須使用ENTRYPOINT
指令的 JSON 數組形式。
...
COPY docker-entrypoint.sh .
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["java", "-jar", "application.jar"]
(在 Kubernetes 中,Helm package 管理器確實有一個模板系統,可以為 ConfigMap object 創建內容,可以將大量額外的機器注入到 apod 中);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.