2017-09-23 141 views
0

如何用简单的Rails应用程序使用docker-machine部署docker-compose应用程序?它有道理吗?如何使用docker-machine部署docker组合应用程序?

我已阅读过关于该主题的多篇文章,包括official Docker docs on using Compose in productionRemote 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" 

看起来像我缺少有关机器的一些重要概念。我该如何编写生产撰写文件以使它们在远程容器主机上工作?

回答

1

从我在错误信息中看到的,看起来像你的问题是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

+0

执行那个好主意,谢谢。试图实现你的建议,但突然间,我开始有'不能分配内存'的错误,同时在我的DO液滴上构建图像... – vtambourine

+0

你找到了解决方案吗?也许你可以分享一些日志,所以我们可以帮助你。 – eLRuLL