热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用非默认运行参数在AWSElasticBeanstalk中运行Docker容器?

如何解决《如何使用非默认运行参数在AWSElasticBeanstalk中运行Docker容器?》经验,为你挑选了1个好方法。

我有一个Docker容器,可以在我的本地开发机器上运行.我想将其移至AWS Elastic Beanstalk,但我遇到了一些麻烦.

我正试图S3通过使用将一个桶装到我的容器中s3fs.我有Dockerfile:

FROM tomcat:7.0
MAINTAINER me@example.com

RUN apt-get update
RUN DEBIAN_FROnTEND=noninteractive apt-get install -y build-essential libfuse-dev libcurl4-openssl-dev libxml++2.6-dev libssl-dev mime-support automake libtool wget tar 

# Add the java source
ADD . /path/to/tomcat/webapps/
ADD run_docker.sh /root/run_docker.sh
WORKDIR $CATALINA_HOME

EXPOSE 8080

CMD ["/root/run_docker.sh"]

我通过运行以下命令安装s3fs,装载S3存储桶并在创建映像后运行Tomcat服务器run_docker.sh:

#!/bin/bash
#run_docker.sh

wget https://github.com/s3fs-fuse/s3fs-fuse/archive/master.zip -O /usr/src/master.zip;
cd /usr/src/;
unzip /usr/src/master.zip;
cd /usr/src/s3fs-fuse-master;
autoreconf --install;
CPPFLAGS=-I/usr/include/libxml2/ /usr/src/s3fs-fuse-master/configure;
make;
make install;
cd $CATALINA_HOME;

mkdir /opt/s3-files;
s3fs my-bucket /opt/s3-files;
catalina.sh run

当我使用以下命令构建并运行此Docker容器时:

docker run --cap-add mknod --cap-add sys_admin --device=/dev/fuse -p 80:8080 -d username/mycontainer:latest

它运作良好.然而,当我删除--cap-add mknod --cap-add sys_admin --device=/dev/fuse,然后s3fs无法安装我的S3桶.

现在,我想上运行此AWS弹性魔豆,当我部署容器(和运行run_docker.sh),所有的步骤执行很好,除了步骤s3fs my-bucket /opt/s3-filesrun_docker.sh无法装入桶中.

据推测,这是因为无论Elastic Beanstalk运行Docker容器,它都不会添加任何额外的标志,如--cap-add mknod --cap-add sys_admin --device=/dev/fuse.

我的Dockerrun.aws.json文件看起来像:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "tomcat:7.0"
  },
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}

是否可以向docker runAWS EB Docker部署添加其他标志? 另一种选择是找到另一种安装S3存储桶的方法,但我怀疑无论如何我都会遇到类似的权限错误.有谁见过任何方法来完成这个???

更新:

对于尝试使用@ Egor的答案的人来说,当EB配置设置为使用时,它会起作用v1.4.0 running Docker 1.6.0.任何超过v1.4.0版本的内容都会失败.因此,为了使其工作,正常构建您的环境(这应该会给您一个失败的构建),然后使用v1.4.0 running Docker 1.6.0配置重建它.应该这样做!



1> 小智..:

如果您使用的是最新版本的aws docker stack(例如docker 1.7.1),则需要稍微修改上述答案.试试这个:

commands:
    00001_add_privileged:
        cwd: /tmp
        command: 'sed -i "s/docker run -d/docker run --privileged -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh'

注意运行脚本的位置和&名称的更改


推荐阅读
author-avatar
永恆極光_822
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有