Невозможно установить переменные окружения в контейнере Docker при построении изображения с помощью задачи Gradle - PullRequest
0 голосов
/ 16 октября 2019

Я написал сборочную задачу buildDocker в моем файле build.gradle следующим образом:

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]

Я также пытался установить переменные среды непосредственно в операторе run, используя параметры -e в команде run ипримонтировав мой файл ~ / .aws / credentials в контейнер докера, но с этим также я получаю то же исключение.

EDIT1: вот команда запуска docker с использованием флагов -e:

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

Кроме того, поместите учетные данные в виде пар ключ-значение в файл-env.list и попробуйте это:

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

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Наконец-то он начал работать с монтированием моего файла учетных данных в контейнер докера:

docker run -p 8888:8888 -v ~/.aws:/root/.aws --link mysql --name myapp <imageName>

учетные данные создаются и хранятся в папке .aws. Ошибка, которую я делал ранее, с монтированием была глупой, вероятно из-за усталости, я продолжал монтировать ее в каталоге / home в контейнере, но вместо этого домашней папкой (~) в контейнере является / root, поэтому, как только я изменил этопроблем не было. Хотя я до сих пор не понимаю, почему не работают флаги -e, в соответствии с этим - https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html amazon java sdk сначала попытается загрузить учетные данные из переменных envа затем из свойств системы Java, а затем из файла профилей учетных данных по умолчанию.

0 голосов
/ 16 октября 2019

Переменные среды, определенные в сценариях, которые запускаются при создании образа, не сохраняются при создании контейнера на основе этого образа.

Вам необходимо явно задать переменные среды, используя директиву ENV в вашем файле Dockerfile. или установите их при запуске контейнера с использованием, например, флага -e.

Для получения дополнительной информации см. эту статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...