我有这个.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 compose文件中,如下所示:
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文件中的变量将数据添加到卷?
答案 0 :(得分:0)
一种实现目标的方法是在主机上${PWD}/config/grade-docker.properties
... ${PWD}/docker-compose.yml
上创建${PWD}
文件。
您现有的volumes
属性将在运行时将此文件映射到容器中,并将其放置在容器的/config
中。
答案 1 :(得分:0)
普通Docker和Docker Compose没有此功能。您可以在主机上的Docker外部创建文件并将其安装到容器中,如图所示,但是Docker和Compose都不具备执行此操作所需的模板功能。
您在问题中描述的总体方法是为每组配置选项构建一个自定义图像。这实际上不是最佳实践:想象一下,由于您连接了需要查看的USB驱动器,因此需要重新编译ls
。
您可以在普通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包管理器确实具有一个模板系统,可以为可注入到pod中的ConfigMap对象创建内容;但这是大量的额外机器。)< / p>