首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ecs cli卡在创建容器

ecs cli卡在创建容器
EN

Stack Overflow用户
提问于 2017-09-22 14:41:02
回答 1查看 638关注 0票数 0

我试图使用ecs命令行在AWS上获得一个有效的Docker环境。

我有一个使用Dockerfiles、docker-compose.yml、一个.env文件和一个entrypoint.sh脚本的工作本地Docker环境。容器是运行PHP的apache服务器和一组扩展,以及一个MySQL db。

框架文件结构如下所示:

代码语言:javascript
复制
./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

以下是两个码头文件:

./docker/数据库/Dockerfile

代码语言:javascript
复制
FROM mysql:5.6
ADD dump.sql /docker-entrypoint-initdb.d

./docker/webserver/Dockerfile

代码语言:javascript
复制
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在web目录中创建了一些目录,供apache写入:

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

代码语言:javascript
复制
mkdir /var/www/html/maps
chown www-data /var/www/html/maps
chgrp www-data /var/www/html/maps
exec "$@"

这是码头-Compose.yml

代码语言:javascript
复制
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

要构建此处引用的图像,请执行以下操作:

  • 使用Admin权限创建AWS IAM用户,并以配置文件名称在~/.AWS/凭据中设置密钥,然后使用export _ profile =my-project-profile设置本地ENV。
  • 然后在本地构建图像,如下所示: docker/webserver $ docker构建-t -t。 码头/数据库$ -t -t。
  • 将docker登录到ECR (运行docker登录命令echo d-out): $aws ecr登录-不包括-电子邮件
  • 创建了repos: $ aws ecr创建-存储库-存储库-名称项目/项目-webserver $ aws ecr创建-存储库-存储库-名称项目/项目-数据库
  • 推送图片: ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-webserver推送$docker ACCOUNT_NUMBER.dkr.ecr.eu-west-1.amazonaws.com/project/project-database推送$docker
  • 检查了它们是否在那里: $ aws ecr描述-图像-存储库-名称项目/项目-webserver $ aws ecr描述-图像-存储库-名称项目/项目-数据库

一切看起来都很好。

  • 在同一区域创建EC2密钥对。 $ecs-cli配置-区域eu-west-1 -集群项目$ cat ~/.ecs/config
  • 尝试在ECS上运行它们: $ecs-cli up -键盘项目-能力-iam-尺寸1-实例-t2型-力

但是,如果我在结果EC2实例的安全组中打开端口22,在其中打开SSH,则可以看到代理容器正在运行,但没有其他:

代码语言:javascript
复制
[ec2-user@ip-10-0-0-122 ~]$ 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-user@ip-10-0-1-102 ~$ docker日志ecs-agent

代码语言:javascript
复制
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

我想我需要弄清楚为什么那些容器没有失效,但是我看起来在哪里,更好的是,接下来我需要做些什么才能让它发挥作用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 15:55:17

如果其他人在这里运行漂流,丢失的咒语是$ ecs-cli compose create,它从您的撰写文件构建ECS任务定义(假设它是兼容的.)

以及$ecs-cli compose run,它将在远程EC2机器上构建和运行容器。

对远程机器进行SSH‘’ing并执行"docker -a“应该会显示正在运行的容器。或“码头日志container_name”看看出了什么问题..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46367372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档