2017-06-02 141 views
0

由於某些原因,環境變量(儘管我在ECS任務中配置了它們)未在運行容器中設置。我錯過了什麼?爲什麼這些值是空的?AWS 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' 

,我使用泊塢窗圖像這是https://github.com/puckel/docker-airflow叉子。該entrypoint的圖像檢查環境變量如下:

#!/usr/bin/env bash 

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

: ${MYSQL_HOST:="default-mysql"} 
: ${MYSQL_PORT:="3306"} 

$MYSQL_*變量被設置爲默認,如果他們沒有在泊塢窗運行命令設置。

當我使用下面的配置從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 

而在我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_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 

輸出是空

回答

0

你的任務d定義定義env變量MYQL_HOST。你在碼頭工作者中做到了這一點。只是CF,修復它,它應該沒問題。