如何使用docker-machine部署docker组合应用程序?
问题描述:
如何用简单的Rails应用程序使用docker-machine部署docker-compose应用程序?它有道理吗?如何使用docker-machine部署docker组合应用程序?
我已阅读过关于该主题的多篇文章,包括official Docker docs on using Compose in production和Remote Deployment Guide by Rackspace,但它们都不适用于我。
我有以下docker-compose
文件中描述一个非常简单的Rails应用程序:使用docker-machine
version: '3'
services:
app:
build:
context: .
dockerfile: containers/production/Dockerfile
image: projectname:app
command: containers/production/bootstrap.sh
ports:
- 3000:3000
volumes:
- .:/app
- gems:/gems
depends_on:
- db
environment:
- DOCKERIZED=1
db:
image: postgres:9.6
ports:
- '5432:5432'
volumes:
- data:/var/lib/postgresql/data
volumes:
data:
gems:
下一个我试图将其部署到远程主机:
eval "$(docker-machine env production)"
docker-compose build
docker-compose up -d
前两步工作非常好。连接到本地Compose的Docker主机,app
图像构建,db
容器开始生产。但推出app
失败:
Creating projectname_app_1 ...
Creating projectname_app_1 ... error
ERROR: for projectname_app_1 Cannot start service app: oci runtime error: container_linux.go:262: starting container process caused "exec: \"containers/production/bootstrap.sh\": stat containers/production/bootstrap.sh: no such file or directory"
看起来像我缺少有关机器的一些重要概念。我该如何编写生产撰写文件以使它们在远程容器主机上工作?
答
从我在错误信息中看到的,看起来像你的问题是containers/production/bootstrap.sh
不存在里面的码头实例。 command
在Docker容器中执行脚本,而不是在主机中执行。
脚本复制到容器的workdir
,并与一些执行它像./bootstrap.sh
,也许这样的事情可以帮助过:
app:
build:
context: .
dockerfile: containers/production/Dockerfile
image: projectname:app
command: /bootstrap.sh
ports:
- 3000:3000
volumes:
- .:/app
- gems:/gems
- ./containers/production/bootstrap.sh:/bootstrap.sh
depends_on:
- db
environment:
- DOCKERIZED=1
检查我的主机与它们各自的匹配文件容器内的路径(/bootstrap.sh
),并在command
执行那个好主意,谢谢。试图实现你的建议,但突然间,我开始有'不能分配内存'的错误,同时在我的DO液滴上构建图像... – vtambourine
你找到了解决方案吗?也许你可以分享一些日志,所以我们可以帮助你。 – eLRuLL