【问题标题】:How to deploy docker-composed application with docker-machine?如何使用 docker-machine 部署 docker-compose 应用程序?
【发布时间】:2017-09-23 01:21:30
【问题描述】:

如何使用 docker-machine 部署带有简单 Rails 应用程序的 docker-compose 应用程序?这有意义吗?

我已经阅读了有关该主题的多篇文章,包括 official Docker docs on using Compose in productionRemote Deployment Guide by Rackspace,但没有一篇真正适合我。

我有一个非常简单的 Rails 应用程序,由以下 docker-compose 文件描述:

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:

接下来我尝试使用docker-machine 将其部署到远程主机:

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"

看起来我错过了一些关于机器的重要概念。我应该如何编写生产 Compose 文件以使其在远程容器主机上工作?

【问题讨论】:

    标签: docker docker-compose docker-machine


    【解决方案1】:

    从我在错误消息中看到的内容来看,您的问题似乎是containers/production/bootstrap.sh 不存在在 docker 实例中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 液滴上构建图像时出现Cannot allocate memory 错误...
    • 您找到解决问题的方法了吗?也许您可以分享一些日志,以便我们为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    相关资源
    最近更新 更多