2017-09-22 91 views
0

我試圖使用ecs-cli命令行在AWS上獲取正常工作的Docker環境。ecs-cli卡住創建容器

我有一個使用Dockerfiles,docker-compose.yml,.env文件和entrypoint.sh腳本的工作本地Docker環境。這些容器是一個運行PHP和一堆擴展的apache網絡服務器,以及一個MySQL數據庫。

骨架的文件結構是這樣的:

./db <-- mounted by db container for persistence 
./docker 
./docker/database 
./docker/database/Dockerfile 
./docker/database/dump.sql 
./docker/webserver 
./docker/webserver/apache-config.conf 
./docker/webserver/Dockerfile 
./docker/webserver/entrypoint.sh 
./docker-compose.yml 
./web <!-- mounted by web server, contains all public web code 

這裏的2個泊塢文件:

./docker/database/Dockerfile

FROM mysql:5.6 
ADD dump.sql /docker-entrypoint-initdb.d 

./docker/webserver/Dockerfile

FROM php:5.6-apache 
RUN apt-get update 
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - 
RUN apt-get install -y zlib1g-dev nodejs gdal-bin 
RUN npm install -g topojson 
RUN docker-php-ext-install mysql mysqli pdo pdo_mysql zip 
RUN pecl install dbase 
RUN docker-php-ext-enable dbase 
COPY apache-config.conf /etc/apache2/sites-enabled/000-default.conf 
RUN a2enmod rewrite headers 
RUN service apache2 restart 
COPY entrypoint.sh /entrypoint.sh 
RUN chmod 0755 /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh", "apache2-foreground"] 

entrypoint.sh創建在apache的web目錄某些目錄寫入到:

./docker/webserver/entrypoint.sh #/ bin/sh的

mkdir /var/www/html/maps 
chown www-data /var/www/html/maps 
chgrp www-data /var/www/html/maps 
exec "[email protected]" 

這裏的碼頭工人,撰寫!陽明海運

version: '2' 

services: 
    webserver: 
    image: ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver 
    ports: 
     - "8080:80" 
    volumes: 
     - ./web:${APACHE_DOC_ROOT} 
    links: 
     - db 
    environment: 
     - HTTP_ROOT=http://${DOCKER_HOST_IP}:${DOCKER_HOST_PORT}/ 
     - PHP_TMP_DIR=${PHP_TMP_DIR} 
     - APACHE_LOG_DIR=${APACHE_LOG_DIR} 
     - APACHE_DOC_ROOT=${APACHE_DOC_ROOT}/ 
     - SERVER_ADMIN_EMAIL=${SERVER_ADMIN_EMAIL} 
     - MYSQL_USER=${MYSQL_USER} 
     - MYSQL_PASSWORD=${MYSQL_PASSWORD} 
     - MYSQL_DATABASE=${MYSQL_DATABASE} 
    env_file: .env 

    db: 
    user: "1000:50" 
    image: ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-database 
    ports: 
     - "4406:3306" 
    volumes: 
     - ./db:/var/lib/mysql 
    environment: 
     - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} 
     - MYSQL_USER=${MYSQL_USER} 
     - MYSQL_PASSWORD=${MYSQL_PASSWORD} 
     - MYSQL_DATABASE=${MYSQL_DATABASE} 
    env_file: .env 

打造引用有我的圖片:

  • ç reated AWS IAM用戶具有管理員權限,並在〜/ .aws設置鍵/下的配置文件名稱的憑證,然後建立使用 出口AWS_PROFILE局部ENV =我的項目知名度

  • 然後建立本地圖片如下:

    docker/webserver $ docker build -t ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver。

    docker/database $ docker build -t ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-database。

  • 了搬運工登錄到ECR(運行泊塢窗login命令回顯到STD-OUT):

    $ AWS ECR獲取登錄--no-包括電子郵件

  • 創建回購:

    $ AWS ECR創建存儲庫--repository名項目/項目的Web服務器

    $ AWS ECR創建存儲庫--repository名項目/項目數據庫

  • 推圖片:

    $搬運工推ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver

    $搬運工推ACCOUNT_NUMBER.dkr.ecr.eu-西1.amazonaws。COM /項目/工程數據庫

  • 經過它們的存在:

    $ AWS ECR描述圖像--repository名項目/項目的Web服務器

    $ AWS ECR描述圖像--repository -name項目/項目數據庫

一切看起來不錯。

  • 創建一個EC2密鑰對在同一地區

    $ ECS-CLI配置--region歐盟 - 西-1 --cluster項目 $貓〜/ .ecs /配置

  • 試戴ECS運行它們:

    $ ECS-CLI高達--keypair項目--capability-IAM --size 1 --instance型t2.micro --force

但是,如果我的安全組所產生的EC2實例和SSH在打開端口22,我可以看到代理容器運行,但沒有其他人:

[[email protected] ~]$ docker ps -a 
CONTAINER ID  IMAGE       COMMAND    CREATED    STATUS    PORTS    NAMES 
d011f1402c26  amazon/amazon-ecs-agent:latest "/agent"   8 minutes ago  Up 8 minutes       ecs-agent 

我沒有看到在日誌中任何壞事爲代理

[EC2用戶@ IP-10-0-1-102〜] $搬運工日誌ECS-劑

2017-09-22T13:32:55Z [INFO] Loading configuration 
2017-09-22T13:32:55Z [INFO] Loading state! module="statemanager" 
2017-09-22T13:32:55Z [INFO] Event stream ContainerChange start listening... 
2017-09-22T13:32:55Z [INFO] Registering Instance with ECS 
2017-09-22T13:32:55Z [INFO] Registered! module="api client" 
2017-09-22T13:32:55Z [INFO] Registration completed successfully. I am running as 'arn:aws:ecs:eu-west-1:248221388880:container-instance/ba24ead4-21a5-4bc7-ba9f-4d3ba0f29c6b' in cluster 'gastrak' 
2017-09-22T13:32:55Z [INFO] Saving state! module="statemanager" 
2017-09-22T13:32:55Z [INFO] Beginning Polling for updates 
2017-09-22T13:32:55Z [INFO] Event stream DeregisterContainerInstance start listening... 
2017-09-22T13:32:55Z [INFO] Initializing stats engine 
2017-09-22T13:32:55Z [INFO] NO_PROXY set:169.254.169.254,169.254.170.2,/var/run/docker.sock 
2017-09-22T13:33:05Z [INFO] Saving state! module="statemanager" 
2017-09-22T13:44:50Z [INFO] Connection closed for a valid reason: websocket: close 1000 (normal): ConnectionExpired: Reconnect to continue 

我想我需要弄清楚爲什麼這些容器不能initalising ,但我在哪裏看,更好的是,下一步我需要做什麼讓這個工作?

回答

0

萬一別人運行漂泊在這裏,缺少的咒語是 $ ecs-cli compose create 從您撰寫的文件構建了一個精英任務定義(假設它是兼容...)

$ecs-cli compose run 將建立和運行遠程EC2機器上的容器。

SSH到遠程計算機並執行「docker ps -a」應顯示容器正在運行。或者「docker logs [container_name]」看看出了什麼問題......