Amazon web services AWS ECS环境变量为';t集

Amazon web services AWS ECS环境变量为';t集,amazon-web-services,amazon-ecs,Amazon Web Services,Amazon Ecs,由于某些原因,虽然我在ECS任务中配置了环境变量,但它们没有在运行的容器中设置。我错过了什么?为什么值是空的 我有以下AWS::ECS::TaskDefinition: AirflowWebTaskDefinition: Type: AWS::ECS::TaskDefinition Properties: Family: !Join ['', [!Ref 'AWS::StackName', -dl-airflow-web]] ContainerDefinitions:

由于某些原因,虽然我在ECS任务中配置了环境变量,但它们没有在运行的容器中设置。我错过了什么?为什么值是空的

我有以下
AWS::ECS::TaskDefinition

AirflowWebTaskDefinition:
  Type: AWS::ECS::TaskDefinition
  Properties:
    Family: !Join ['', [!Ref 'AWS::StackName', -dl-airflow-web]]
    ContainerDefinitions:
    - Name: dl-airflow-web
      Cpu: '10'
      Essential: 'true'
      Image: companyname-docker-snapshot-local.jfrog.io/docker-airflow:1.0
      Command: ['webserver']
      Memory: '1024'
      LogConfiguration:
        LogDriver: awslogs
        Options:
          awslogs-group: !Ref 'AirflowCloudwatchLogsGroup'
          awslogs-region: !Ref 'AWS::Region'
          awslogs-stream-prefix: dl-airflow-web
      PortMappings:
      -
        ContainerPort: 8080
      Environment:
      - Name: LOAD_EX
        Value: n
      - Name: EXECUTOR
        Value: Celery
      - Name: MYQL_HOST
        Value: !Ref 'RDSDNSName'
      - Name: MYSQL_PORT
        Value: !Ref 'RDSPort'
      - Name: MYSQL_DB
        Value: !Ref 'AirflowDBName'
      - Name: USERNAME
        Value: !Ref 'AirflowDBUser'
      - Name: PASSWORD
        Value: !Ref 'AirflowDBPassword'
我使用的是docker图像,它是。图像的
入口点检查环境变量,如下所示:

#!/usr/bin/env bash

AIRFLOW_HOME="/usr/local/airflow"
CMD="airflow"
TRY_LOOP="20"

: ${MYSQL_HOST:="default-mysql"}
: ${MYSQL_PORT:="3306"}
其中,
$MYSQL.*
变量如果未在docker run命令中设置,则设置为默认值

当我使用下面的配置从
docker compose
运行容器映像时,它会工作,并且环境变量都已设置:

webserver:
  image: companyname-docker-snapshot-local.jfrog.io/docker-airflow:1.0
  environment:
    - LOAD_EX=n
    - EXECUTOR=Celery
    - MYSQL_HOST=mysql
    - MYSQL_PORT=3306
    - USERNAME=dev-user
    - PASSWORD=dev-secret-pw
    - SQS_HOST=sqs
    - SQS_PORT=9324
    - AWS_DYNAMODB_ENDPOINT=http://dynamodb:8000
  ports:
    - "8090:8080"
  command: webserver
以及my
entrypoint.sh
中的以下命令:

  echo "$(date) - Checking for MYSQL (host: $MYSQL_HOST, port: $MYSQL_PORT) connectivity"
记录此输出:

Fri Jun  2 12:55:26 UTC 2017 - Checking for MYSQL (host: mysql, port: 3306) connectivity
但查看我的cloudwatch日志会显示此输出的默认值:

Fri Jun 2 14:15:03 UTC 2017 - Checking for MYSQL (host: default-mysql, port: 3306) connectivity
但是我可以通过ssh连接到EC2主机,运行
docker inspect[container\u id]
并验证环境变量是否已设置:

Config": {
    "Hostname": "...",
    "Domainname": "",
    "User": "airflow",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "ExposedPorts": {
        "5555/tcp": {},
        "8080/tcp": {},
        "8793/tcp": {}
    },
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
        "MYSQL_PORT=3306",
        "PASSWORD=rds-secret-pw",
        "USERNAME=rds-user",
        "EXECUTOR=Celery",
        "LOAD_EX=n",
        "MYQL_HOST=rds-cluster-name.cluster-id.aws-region.rds.amazonaws.com",
        "MYSQL_DB=db-name",
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "DEBIAN_FRONTEND=noninteractive",
        "TERM=linux",
        "LANGUAGE=en_US.UTF-8",
        "LANG=en_US.UTF-8",
        "LC_ALL=en_US.UTF-8",
        "LC_CTYPE=en_US.UTF-8",
        "LC_MESSAGES=en_US.UTF-8"
    ],
    "Cmd": [
        "webserver"
    ],
    "Image": "companyname-docker-snapshot-local.jfrog.io/docker-airflow:1.0",
    "Volumes": null,
    "WorkingDir": "/usr/local/airflow",
    "Entrypoint": [
        "/entrypoint.sh"
    ],
    "OnBuild": null,
    "Labels": {
        "com.amazonaws.ecs.cluster": "...",
        "com.amazonaws.ecs.container-name": "...",
        "com.amazonaws.ecs.task-arn": "...",
        "com.amazonaws.ecs.task-definition-family": "...",
        "com.amazonaws.ecs.task-definition-version": "16"
    }
},
如果我跑步:

$ docker exec [container-id] echo $MYSQL_HOST

输出为空

您的任务定义定义了环境变量MYQL\u HOST。你在《码头工人》里说得对。只要把CF修好就可以了