may*_*r86 23 amazon-ec2 amazon-web-services docker amazon-elastic-beanstalk
这就是问题,我需要告诉Docker不要容器化网络,因为它需要连接到VPN(企业专用数据库)内的MongoDB.
有一个Docker命令让我这样做:--net=host.参考这里.
因此,例如,在本地计算机上运行容器时,我会执行以下操作:
docker run --rm -it --net=host [image-name]:[version] bash -il
Run Code Online (Sandbox Code Playgroud)
而这个命令将起到作用.多亏了这一点,我可以连接到"私人"MongoDB.
所以,我的问题是:有没有办法docker run在Elastic Beanstalk上自定义Single Docker Environment 的命令,所以我可以添加--net=host?
我已经尝试将container_commands用于config.yml文件中以在那里添加该指令,但我认为这不是我需要的,这里是一个片段:
container_commands:
00-test_command:
command: bundle exec thin --net=host
01-networking-fix:
command: "docker run --rm -it --net=host [image-name]:[version] bash -il"
Run Code Online (Sandbox Code Playgroud)
mqs*_*soh 12
我最后用两个容器命令修复它
container_commands:
00_fix_networking:
command: sed -i 's/docker run -d/docker run --net=host -d/' /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh
01_fix_docker_ip:
command: sed -i 's/server $EB_CONFIG_NGINX_UPSTREAM_IP/server localhost/' /opt/elasticbeanstalk/hooks/appdeploy/enact/01flip.sh
Run Code Online (Sandbox Code Playgroud)
更新:我还必须修复Upstart脚本.不幸的是,我没有记下我的所作所为,因为我最终不需要改变docker run命令.files(我认为)你会做一个指令/etc/init/docker.AWS也以与01flip.sh该文件相同的方式编辑Nginx配置.
说明:
在64bit Amazon Linux 2015.03 v2.0.2 running Docker 1.7.1平台版本中,您需要编辑的文件是/opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh.这个文件现在比Samar的版本复杂得多,所以我不想把实际内容放在那里.但是,变化基本相同.有一条线开头
docker run -d
Run Code Online (Sandbox Code Playgroud)
我用容器命令修复它:
container_commands:
00_fix_networking:
command: sed -i 's/docker run -d/docker run --net=host -d/' /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh
Run Code Online (Sandbox Code Playgroud)
这成功地增加了--net=host论点,但现在又出现了另一个问题.系统最终会出现无效的Nginx指令.使用--net=host意味着当您运行时docker inspect <container id>,NetworkSettings中没有IP地址.AWS使用它来为Nginx创建服务器指令并最终生成server :<some port you chose>(在添加之前--net=host看起来像server <ip>:<port>).我也需要修补该文件.它产生于/opt/elasticbeanstalk/hooks/appdeploy/enact/01flip.sh.
01_fix_docker_ip:
command: sed -i 's/server $EB_CONFIG_NGINX_UPSTREAM_IP/server localhost/' /opt/elasticbeanstalk/hooks/appdeploy/enact/01flip.sh
Run Code Online (Sandbox Code Playgroud)
虽然 Elastic beanstalk 通常非常适合使用标准配置集的应用程序,但很难自定义并保持更新以及 AWS 向 EB 堆栈提供的更新。话虽如此,我已经做了类似下面的事情,虽然有点hacky但效果很好。
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh":
mode: "000755"
owner: root
group: root
encoding: plain
content: |
#script content of original 04run.sh along with modification on docker run cmd
# eg. I injected multi-ports here
docker run -d \
"${EB_CONFIG_DOCKER_ENV_ARGS[@]}" \
"${EB_CONFIG_DOCKER_VOLUME_MOUNTS[@]}" \
"${EB_CONFIG_DOCKER_ENTRYPOINT_ARGS[@]}" \
"${PORT_ARGS[@]}" \
$EB_CONFIG_DOCKER_IMAGE_STAGING \
"${EB_CONFIG_DOCKER_COMMAND_ARGS[@]}" 2>&1 | tee /tmp/docker_run.log | tee $EB_CONFIG_DOCKER_STAGING_APP_FILE
Run Code Online (Sandbox Code Playgroud)
这不是很整洁,至少我必须确保它不会随着弹性豆茎的更新而中断。上面的内容适用于 docker 1.5 堆栈,但您可以对您正在运行的版本执行类似的操作。
| 归档时间: |
|
| 查看次数: |
5118 次 |
| 最近记录: |