我正在使用一个docker容器来构建和部署我的软件到ec2的集合.在部署脚本中,我构建了我的软件,然后将其打包到docker镜像中.图像被推送到我的私人注册表,由我的生产ec2's拉,然后运行.所以基本上我需要在docker容器中运行docker.
问题是我实际上无法在我的容器上启动docker.如果我试试
service docker start
Run Code Online (Sandbox Code Playgroud)
我明白了
bash: service: command not found
Run Code Online (Sandbox Code Playgroud)
如果我试试
docker -d
Run Code Online (Sandbox Code Playgroud)
我明白了
2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver:
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock)
[e2feb6f9] +job initserver()
[e2feb6f9.initserver()] Creating server
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock)
[error] attach_loopback.go:42 There are no more loopback device available.
loopback mounting failed
[e2feb6f9] -job initserver() = ERR (1)
2014/10/07 15:54:35 loopback mounting failed
Run Code Online (Sandbox Code Playgroud)
docker容器上不存在service命令,因此我无法启动docker.我不知道我现在应该做什么来启动码头工具所以我有点卡在这里,任何帮助都表示赞赏.
更多信息
主机正在运行fedora 20(最终将在ec2上运行amazon linux)
Docker容器正在运行centos 7.0
主机运行Docker 1.2.0版,构建fa7b24f/1.2.0
Container正在运行docker-0.11.1-22.el7.centos.x86_64
我需要在运行amazon linux(centos)的主机上设置docker来监听tcp://0.0.0.0/4243.我见过的所有文档告诉我运行以下命令
echo DOCKER_OPTS="-H=tcp://127.0.0.1:4243" >> /etc/default/docker
Run Code Online (Sandbox Code Playgroud)
这会将正确的docker_opts写入/ etc/default/docker.我已经完成了这个,但是当我重新启动docker时它不会收听127.0.0.1
我可以通过输入正确运行docker
sudo /usr/bin/docker -H tcp://0.0.0.0:4243 -d &
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我希望默认选项是在tcp://0.0.0.0:4243上侦听,而不必每次都指定它.
似乎docker完全忽略了我的/ etc/default/docker文件,因此忽略了设置.我也尝试将文件写入/etc/default/docker.io和/ etc/default/docker-io(实际上没想到会发生太多事情)
我需要能够启动docker
service docker start
Run Code Online (Sandbox Code Playgroud)
或者它会在我当前的部署手册中引起问题.
有什么想法我可以做什么来设置DOCKER_OPTS而不是每次重启docker时都不需要这样做?
我们正在为工作中的托管服务构建集群,最终产品将用于托管多个单独的服务.我们正在决定如何设置数据库.我们正在运行一个postgresql数据库服务器,集群中的所有服务都将使用该服务器.现在的争论是,是否在单个数据库中为每个服务提供自己的模式,或者为每个服务提供自己的数据库.
我们不确定哪种解决方案对我们来说更好.我们的服务都没有共同的结构,也不需要共享数据.我们更关心的是易用性.
这是我们最关心的,我们真的希望得到一个客观的,基于意见的答案.
备份
灾难恢复 - 所有服务与个人
服务之间的安全
性能
对于某些其他信息,群集在AWS中托管,我们的数据库是RDS实例.
我最近一直在开发 django 应用程序,它终于准备好部署到质量保证和生产环境中了。一切都在本地完美运行,但由于增加了现实世界部署的复杂性,我遇到了一些问题。
首先,我的技术堆栈有点复杂。对于部署,我使用 aws 进行所有操作,将我的站点部署在由负载均衡器支持的多个 ec2 上。负载均衡器使用 ssl 进行保护,但到负载均衡器的连接将通过端口 80 上的标准 http 转发到 ec2。在端口 80 上访问 ec2 后,它们将转发到端口 8000 上的 docker 容器(如果您不熟悉docker 只是认为它是一个标准的虚拟机)。在容器内部,nginx 监听端口 8000,它处理 django 中静态文件的重定向,对于 Web 请求,它会将请求转发到在 127.0.0.1:8001 上运行的 django。Django 由 uwsgi 托管,监听端口 8001。
server {
listen 8000;
server_name localhost;
location /static/ {
alias /home/library/deploy/thelibrary/static/;
}
location / {
proxy_set_header X-Forwarded-Host $host:443;
proxy_pass http://127.0.0.1:8001/;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用 X-Forwarded 主机,因为我遇到了来自 google oauth 的重定向问题,并且重定向提示用户登录,使浏览器请求 url 127.0.0.1:8001,这显然不起作用。在我的 settings.py 文件中我还包括
USE_X_FORWARDED_HOST = True
Run Code Online (Sandbox Code Playgroud)
强制 django 使用正确的主机进行重定向。
现在,该网站的常规浏览工作正常,静态文件加载、重定向工作正常,并且该网站通过 ssl 进行保护。但问题是 CSRF 验证失败。 …