gpt4 book ai didi

java - 使用 gradle 任务构建镜像时无法在 docker 容器内设置环境变量

转载 作者:行者123 更新时间:2023-12-01 23:01:49 26 4
gpt4 key购买 nike

我在 build.gradle 文件中编写了一个 gradle 任务 buildDocker,如下所示:

task buildDocker(type: Docker, dependsOn: copyJar) {
push = false
baseImage "openjdk:8u151"
println System.getenv('AWS_ACCESS_KEY_ID')
println System.getenv('AWS_SECRET_ACCESS_KEY')
setEnvironment('AWS_ACCESS_KEY_ID',System.getenv('AWS_ACCESS_KEY_ID'))
setEnvironment('AWS_SECRET_ACCESS_KEY',System.getenv('AWS_SECRET_ACCESS_KEY'))
runCommand("mkdir myProject")
addFile("myProject-0.0.jar","myProject/")
workingDir("/myProject")
runCommand("unzip -q myProject-0.0.jar")
exposePort(8888)
entryPoint(["java","-XX:+UnlockExperimentalVMOptions","-
XX:+UseCGroupMemoryLimitForHeap","-XX:MaxRAMFraction=1","-XshowSettings:vm","-cp",
"/myProject-config:.","org.springframework.boot.loader.JarLauncher"])
}

当我通过运行任务构建图像时,我可以在终端中看到 println 输出。但是当我运行图像时,我不断收到以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMessageListenerContainer' defined in class path resource [org/springframework/cloud/aws/messaging/config/annotation/SqsConfiguration.class]: Invocation of init method failed; nested exception is com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain: [com.amazonaws.auth.profile.ProfileCredentialsProvider@46244e65: profile file cannot be null]
Caused by: com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain: [com.amazonaws.auth.profile.ProfileCredentialsProvider@46244e65: profile file cannot be null]

我还尝试通过在运行命令中使用 -e 参数并将我的 ~/.aws/credentials 文件安装到 docker 容器来直接在运行语句中设置环境变量,但也通过这些,我得到了同样的异常。

EDIT1:这是使用 -e 标志的 docker run 命令:

docker run -e AWS_ACCESS_KEY_ID=XXXX -e AWS_SECRET_ACCESS_KEY=XXXX --link mysql --name myapp <imageName>

此外,将凭据作为键值对放入 file-env.list 中并尝试以下操作:

docker run --env-file env.list -v --link mysql --name myapp <imagename>

最佳答案

在构建镜像时运行的脚本中定义的环境变量在创建基于该镜像的容器时不会保留。

您需要在 Dockerfile 中使用 ENV 指令显式设置环境变量,或者在运行容器时使用 -e 标志来设置环境变量。

请参阅this article了解更多信息。

关于java - 使用 gradle 任务构建镜像时无法在 docker 容器内设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58418078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com