2017-09-22 8 views
0

ecs-cli 명령 줄을 사용하여 AWS에서 작동중인 Docker 환경을 얻으려고합니다.ecs-cli가 컨테이너 생성을 방해했습니다.

Dockerfiles, docker-compose.yml, .env 파일 및 entrypoint.sh 스크립트를 사용하는 로컬 로컬 Docker 환경이 있습니다. 컨테이너는 PHP와 많은 확장 기능을 수행하는 아파치 웹 서버와 MySQL DB이다.

해골 파일 구조는 다음과 같이이다 : 여기

./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"] 

./docker/webserver/entrypoint.sh #/빈/SH

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

고정 표시기-작성입니다!entrypoint.sh은으로 작성하는 아파치의 웹 디렉토리의 일부 디렉토리를 생성합니다.

  • C : YML

    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 
    

    I이 참조 이미지를 빌드하려면 관리자 권한으로 AWS IAM 사용자를 reated와 ~/.aws에 키를 설정/프로파일 이름으로 자격 증명, 다음 설정 수출 AWS_PROFILE를 사용하여 로컬 ENV는 = 내 프로젝트 프로파일

  • 그런 다음 로컬 이미지를 구축 다음과 같이 :

    도커/웹 서버 $ 도커 빌드 -t ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver.

    도커/데이터베이스 $ 도커 빌드 -t ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-database.

    $ AWS ECR GET-로그인 포함 --no--이메일을

  • 생성됨의 repos :

  • 있어 고정 표시기 (아웃을 수 std하기 위해 고정 표시기 로그인 명령 echo'd을 실행) ECR에 로그인 :

    $ AWS ECR 만들-저장소 --repository 이름 프로젝트/프로젝트 웹 서버

    $ AWS ECR 만들-저장소 --repository 이름 프로젝트/프로젝트 데이터베이스

  • 밀어 이미지 :

    $ 고정 표시기 푸시 고정 표시기 푸시 $

    ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver ACCOUNT_NUMBER.dkr.ecr.eu- west-1.amazonaws.COM/프로젝트/프로젝트 데이터베이스

  • 는이 검사가 :

    $ AWS ECR 설명 - 이미지 --repository 이름 프로젝트/프로젝트 웹 서버

    $ AWS ECR 설명 - 이미지 --repository -name 프로젝트/프로젝트 데이터베이스

모두 괜찮아 보인다.

  • 는 같은 지역에있는 EC2 키 쌍을 생성

    $ ECS-CLI 구성 --region 유럽 연합 (EU) - 서 - 1 --cluster 프로젝트 $ 고양이 ~/.ecs/설정

  • 는 ECS에 그들을 실행 시도 :

    $ ECS-cli를 --keypair 프로젝트 --capability - 스피 --size 1 --instance 형을가 --force t2.micro

하지만 에이전트 컨테이너 실행을 볼 수 있습니다에서 나는 결과 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 

나는 로그에 나쁜 아무것도 표시하지 않습니다 에이전트에 대한

고정 표시기를 기록 $

[@의 IP-10-0-1-102 ~는 EC2 사용자]

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되지 않는 이유를 알아낼 필요가 생각 ECS을 에이전트 , 그러나 나는 어디에서보아야합니까, 더 나은 여전히, 다음에해야 할 일은 무엇입니까? 이것을 작동 시키려면? 경우 다른 사람에

답변

0

여기에 표류 실행, 누락 된 주술이 작성 파일에서 ECS 작업 정의를 구축 $ ecs-cli compose create 했다

$ecs-cli compose run 구축 할 (... 호환입니다 가정) 원격 EC2 시스템에서 컨테이너를 실행하십시오.

원격 컴퓨터에 SSH 연결하고 "도커 ps -a"를 실행하면 컨테이너가 실행 중이어야합니다. 또는 "docker가 [container_name]을 (를) 기록"하여 무엇이 잘못되었는지 확인합니다.