ECS: переменные среды установлены в задаче, но отсутствуют в контейнере

У меня есть определение задачи, которое выглядит так:

> aws ecs describe-task-definition --task-definition ruby-on-rails-test
{
    "taskDefinition": {
        "status": "ACTIVE",
        "networkMode": "bridge",
        "family": "ruby-on-rails-test",
        "placementConstraints": [],
        "requiresAttributes": [
            {
                "name": "com.amazonaws.ecs.capability.ecr-auth"
            },
            {
                "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
            }
        ],
        "volumes": [
            {
                "host": {
                    "sourcePath": "/opt/cf/rails-app/public/"
                },
                "name": "ruby-on-rails-public-volume"
            }
        ],
        "taskDefinitionArn": "arn:aws:ecs:us-east-1:accountId:task-definition/ruby-on-rails-test:5",
        "containerDefinitions": [
            {
                "memoryReservation": 1024,
                "environment": [
                    {
                        "name": "DATABASE_HOSTNAME",
                        "value": "hostname"
                    },
                    {
                        "name": "PUMA_WORKERS",
                        "value": "2"
                    },
                    {
                        "name": "RAILS_ENV",
                        "value": "staging"
                    },
                    {
                        "name": "DATABASE_NAME",
                        "value": "ruby-on-rails"
                    },
                    {
                        "name": "DEBIAN_FRONTEND",
                        "value": "noninteractive"
                    },
                    {
                        "name": "PORT",
                        "value": "8080"
                    },
                    {
                        "name": "LANG",
                        "value": "en_US.UTF-8"
                    },
                    {
                        "name": "DATABASE_PASSWORD",
                        "value": "cf"
                    },
                    {
                        "name": "DATABASE_USER",
                        "value": "cf"
                    },
                    {
                        "name": "PUMA_MAX_THREADS",
                        "value": "6"
                    }
                ],
                "name": "ruby-on-rails-test",
                "mountPoints": [
                    {
                        "sourceVolume": "ruby-on-rails-public-volume",
                        "containerPath": "/opt/cf/rails-app/public/"
                    }
                ],
                "image": "accountId.dkr.ecr.us-east-1.amazonaws.com/cf/rails:latest",
                "cpu": 1024,
                "portMappings": [
                    {
                        "protocol": "tcp",
                        "containerPort": 8080,
                        "hostPort": 8080
                    }
                ],
                "command": [
                    "puma",
                    "-C",
                    "config/puma.rb"
                ],
                "essential": true,
                "volumesFrom": []
            }
        ],
        "revision": 5
    }
}

При загрузке контейнера переменные среды не устанавливаются. Я выполнил следующую команду с компьютера-контейнера ecs, из контейнера, который не удалось запустить

[root@ip-ip docker]# docker run --name 46485594ffc4 accountId.dkr.ecr.us-east-1.amazonaws.com/    cf/rails:latest env
PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=0e0656e4e84c
RUBY_MAJOR=2.3
RUBY_VERSION=2.3.4
RUBY_DOWNLOAD_SHA256=341cd9032e9fd17c452ed8562a8d43f7e45bfe05e411d0d7d627751dd82c578c
RUBYGEMS_VERSION=2.6.12
BUNDLER_VERSION=1.15.0
GEM_HOME=/usr/local/bundle
BUNDLE_PATH=/usr/local/bundle
BUNDLE_BIN=/usr/local/bundle/bin
BUNDLE_SILENCE_ROOT_WARNING=1
BUNDLE_APP_CONFIG=/usr/local/bundle
APP_HOME=/opt/cf/rails-app
HOME=/root

Любая идея, почему переменные не устанавливаются?

Заранее спасибо.

1 ответ

Решение

Когда ты docker run изображение само по себе, вам не хватает дыры, которую AWS делает для запуска контейнера. Он устанавливает env vars только в его docker run,

Ты сделаешь:

запуск докера --name 46485594ffc4 accountId.dkr.ecr.us-east-1.amazonaws.com/cf/rails:latest env

Там у вас ничего нет о задаче, которую вы настроили. У вас есть только изображение, которое вы нажали.

Итак, чтобы проверить переменные среды из остановленного контейнера, вы должны сначала найти его:

docker ps -a

Затем с идентификатором контейнера выполните:

docker inspect ID

И там вы должны увидеть env vars.

PS: Если вы хотите увидеть, что происходит с этим контейнером, проверьте его журналы: docker logs ID

Другие вопросы по тегам