[英]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.