Amazon web services 尝试连接到AWS ECS EC2实例中的容器时,在$PATH中找不到可执行文件

Amazon web services 尝试连接到AWS ECS EC2实例中的容器时,在$PATH中找不到可执行文件,amazon-web-services,docker,amazon-ecs,Amazon Web Services,Docker,Amazon Ecs,我很难弄清楚如何通过ssh连接到EC2实例中的Docker容器。基本上,我可以进入服务器并使用docker ps列出我的容器 但是,我无法在该容器中获得一个shell来运行一些shell脚本,我需要这些shell脚本来运行它 在本地,我只是使用 docker attach [cid] # or 'docker exec -it [cid] bash' to open new shell 。。。但是运行docker-attach和docker-exec-it[cid]bash时存在明显的问题,我

我很难弄清楚如何通过ssh连接到EC2实例中的Docker容器。基本上,我可以进入服务器并使用
docker ps
列出我的容器

但是,我无法在该容器中获得一个shell来运行一些shell脚本,我需要这些shell脚本来运行它

在本地,我只是使用

docker attach [cid] # or 'docker exec -it [cid] bash' to open new shell
。。。但是运行
docker-attach
docker-exec-it[cid]bash
时存在明显的问题,我得到了

rpc error: code = 2 desc = "oci runtime error: exec failed: exec: \"bash\": executable file not found in $PATH"
为了提供一些细节,我相信我已经正确设置了ECS。从名为amzn-AMI-2016.03.e-amazon-ecs-optimized的适用社区AMI,我已完成以下设置:

  • 适用的ecsInstanceRole和ecsServiceRole
  • 正在运行的EC2实例
  • 指向该实例的负载平衡器
  • ECS中的标记存储库
  • 指向ECS存储库的ECS任务定义
  • 已分配一个实例插槽的ECS群集,并已通过(我相信)启动脚本成功关联到EC2。这个集群还有一个与我提到的负载平衡器相关联的服务以及相关联的任务定义
我不认为这是我的问题所在(但也许)

也许是我的文件

FROM    centos:centos6

RUN yum -y update; yum clean all; \
    yum groupinstall -y "Web Server" "MySQL Database" "PHP Support" "Development Tools"; \
    service httpd start; \
    chkconfig httpd on;

RUN yum install -y openssh openssh-clients git php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel php-pecl-apc mysql;

# PHP
RUN sed -i '\%^<Directory "/var/www/html">%,\%^</Directory>% s/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf;

# MONGO
ADD docker/mongo/setup.sh /root/mongo.setup.sh

RUN chmod +x /root/mongo.setup.sh;

RUN yum install -y cyrus-sasl2 cyrus-sasl-devel php-devel; \
    echo "extension=mongo.so" >> /etc/php.ini;

# GIT CONFIG AND AUTH
ADD docker/ssh/ /root/.ssh/

RUN chmod 600 /root/.ssh/*; \
    touch /root/.ssh/known_hosts; \
    ssh-keyscan github.com >> /root/.ssh/known_hosts;

# EMAIL SES CONFIG AND AUTH
ADD docker/postfix/sasl_passwd /etc/postfix/sasl_passwd

ADD docker/postfix/main.appended.txt /etc/postfix/main.appended.txt

ADD docker/postfix/setup.sh /root/postfix.setup.sh

RUN chmod +x /root/postfix.setup.sh;

RUN yum install -y stunnel telnet telnet-server mailx postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5 cyrus-imapd postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5 cyrus-imapd openssl openssl-devel; \
    sed -i 's/-o smtp_fallback_relay=/#-o smtp_fallback_relay=/g' /etc/postfix/master.cf; \
    cat /etc/postfix/main.appended.txt >> /etc/postfix/main.cf; \
    chmod 600 /etc/postfix/main.appended.txt; \
    postmap hash:/etc/postfix/sasl_passwd;

# ADD YII LIBRARY
ADD docker/yii.tar.gz /var/www

# CLONE APPLICATION
RUN cd /var/www; \
    mkdir repo; \
    git clone git@github.com:myrepos.git html; \
    cd html; \
    git checkout production;

# NODE INSTALLATION
RUN yum install -y gcc gcc-c++ wget tar; \
    cd /root/; \
    wget http://nodejs.org/dist/v0.10.30/node-v0.10.30.tar.gz; \
    tar xzvf node-v*; \
    cd node-v*; \
    ./configure; \
    make; \
    make install;

# CREATE SOME DIRECTORIES FOR THE APPLICATION
RUN mkdir /var/www/.tmp; \
    mkdir /var/www/.tmp/data; \
    mkdir /var/www/coach_tests; \
    mkdir /var/www/html/protected/data/sessions; \
    mkdir /var/www/html/staging/protected/data/sessions; \
    mkdir /var/www/html/development/protected/data/sessions; \
    mkdir /var/www/html/protected/runtime; \
    mkdir /var/www/html/staging/protected/runtime; \
    mkdir /var/www/html/development/protected/runtime; \
    mkdir /var/www/html/assets; \
    mkdir /var/www/html/images/cache;

# GRUNT SETUP
ADD docker/www/Gruntfile.coffee /var/www/Gruntfile.coffee
ADD docker/www/package.json /var/www/package.json

RUN npm install -g grunt-cli; \
    cd /var/www; \
    npm install;

# S3 MOUNT CONFIG AND AUTH
ADD docker/s3/setup.sh /root/s3.setup.sh

RUN chmod +x /root/s3.setup.sh;

RUN yum install -y glib2-devel fuse-devel libevent-devel libxml2-devel; \
    cd /root/; \
    wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz; \
    tar -xzf libevent-2.0.21-stable.tar.gz; \
    cd libevent-2.0.21-stable; \
    ./configure && make; \
    make install; \
    echo "/usr/local/lib/" > /etc/ld.so.conf.d/riofs.conf; \
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; \
    ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5; \
    cd ../; \
    git clone https://github.com/skoobe/riofs.git; \
    cd riofs; \
    ./autogen.sh; \
    ./configure; \
    make; \
    make install; \
    mkdir -p /var/www/html/images/user; \
    mkdir -p /var/www/html/images/store; \
    mkdir -p /var/www/html/images/sponsor; \
    mkdir -p /var/www/html/images/supporter; \
    mkdir -p /var/www/html/images/media;

# USEFUL TOOLS
ADD docker/startup.sh /root/startup.sh

RUN chmod +x /root/startup.sh;

RUN yum install -y nano;

# GRUNT INITIATE
RUN cd /var/www; \
    grunt init;
来自centos:centos 6
运行yum-y更新;百胜全洁\
yum-groupinstall-y“Web服务器”“MySQL数据库”“PHP支持”“开发工具”\
服务httpd启动\
chkconfig httpd on;
运行yum安装-y openssh openssh客户端git php mysql php gd php imap php ldap php odbc php pear php xml php xmlrpc php mbstring php mcrypt php mssql php snmp php soap php tidy curl curl devel php pecl apc mysql;
#PHP
运行sed-i'\%^%,\%^%s/AllowOverride None/AllowOverride All/'/etc/httpd/conf/httpd.conf;
#蒙戈
添加docker/mongo/setup.sh/root/mongo.setup.sh
运行chmod+x/root/mongo.setup.sh;
运行yum安装-y cyrus-sasl2 cyrus-sasl-devel-php-devel\
echo“extension=mongo.so”>>/etc/php.ini;
#GIT配置和身份验证
添加docker/ssh//root/.ssh/
运行chmod 600/root/.ssh/*\
touch/root/.ssh/known_hosts\
ssh keyscan github.com>>/root/.ssh/known_hosts;
#电子邮件SES配置和身份验证
添加docker/postfix/sasl\u passwd/etc/postfix/sasl\u passwd
添加docker/postfix/main.added.txt/etc/postfix/main.added.txt
添加docker/postfix/setup.sh/root/postfix.setup.sh
运行chmod+x/root/postfix.setup.sh;
运行yum安装-y stunnel telnet telnet服务器mailx后缀cyrus sasl cyrus sasl plain cyrus-sasl-md5 cyrus imapd后缀cyrus sasl cyrus sasl plain cyrus-sasl-md5 cyrus imapd openssl-devel\
sed-i's/-o smtp_fallback_relay=/#o smtp_fallback_relay=/g'/etc/postfix/master.cf\
cat/etc/postfix/main.added.txt>>/etc/postfix/main.cf\
chmod 600/etc/postfix/main.added.txt\
postmap散列:/etc/postfix/sasl\u passwd;
#添加YII库
添加docker/yii.tar.gz/var/www
#克隆应用程序
运行cd/var/www\
mkdir回购\
git克隆git@github.com:myrepos.git html\
光盘html\
git校验生产;
#节点安装
运行yum安装-y gcc-c++wget-tar\
cd/root/\
wgethttp://nodejs.org/dist/v0.10.30/node-v0.10.30.tar.gz; \
tarxzvf节点-v*\
cd节点-v*\
/配置\
制作\
制作安装;
#为应用程序创建一些目录
运行mkdir/var/www/.tmp\
mkdir/var/www/.tmp/data\
mkdir/var/www/coach_tests\
mkdir/var/www/html/protected/data/sessions\
mkdir/var/www/html/staging/protected/data/sessions\
mkdir/var/www/html/development/protected/data/sessions\
mkdir/var/www/html/protected/runtime\
mkdir/var/www/html/staging/protected/runtime\
mkdir/var/www/html/development/protected/runtime\
mkdir/var/www/html/assets\
mkdir/var/www/html/images/cache;
#咕噜声设置
添加docker/www/gruntile.coffee/var/www/gruntile.coffee
添加docker/www/package.json/var/www/package.json
运行npm安装-g grunt cli\
cd/var/www\
npm安装;
#S3装载配置和身份验证
添加docker/s3/setup.sh/root/s3.setup.sh
运行chmod+x/root/s3.setup.sh;
运行yum安装-y glib2-devel-fuse-devel-libevent-devel-libxml2-devel\
cd/root/\
wgethttps://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz; \
tar-xzf-libevent-2.0.21-stable.tar.gz\
cd-libevent-2.0.21-稳定\
/配置和制作\
制作安装\
echo“/usr/local/lib/”>/etc/ld.so.conf.d/riofs.conf\
导出PKG_CONFIG_PATH=/usr/local/lib/pkgconfig\
ln-s/usr/local/lib/libevent-2.0.so.5/usr/lib64/libevent-2.0.so.5\
cd./\
git克隆https://github.com/skoobe/riofs.git; \
cd-riofs\
//autogen.sh\
/配置\
制作\
制作安装\
mkdir-p/var/www/html/images/user\
mkdir-p/var/www/html/images/store\
mkdir-p/var/www/html/images/赞助商\
mkdir-p/var/www/html/images/supporter\
mkdir-p/var/www/html/images/media;
#有用的工具
添加docker/startup.sh/root/startup.sh
运行chmod+x/root/startup.sh;
运行yum安装-y nano;
#咕噜声
运行cd/var/www\
grunt init;

检查图像/容器中安装了哪个外壳

sudo docker exec -it [cid] echo $SHELL
如果上述命令返回/bin/bash,则docker exec-it[cid]bash应该可以工作


否则,您必须使用适当的shell

哦,老兄。。。有时,当我对某件事还不熟悉时,我会花很多时间寻找一些小细节,而这些小细节恰恰是我在更明显的问题上发现的。在这个特殊的例子中,我忽略了我的
docker ps
列表中的“IMAGE”列,假设它一定是我的镜像,而不注意容器ID。唯一运行的容器是
amazon/amazon ecs代理:latest
,所以难怪我在获取外壳时遇到问题