如何使用docker-machine部署docker组成的应用程序?

如何用简单的Rails应用程序使用docker-machine部署docker-compose应用程序? 这是否有道理?

我已经阅读了关于该主题的多篇文章,其中包括正式的Docker文档 ,内容包括生产中的Compose和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 

前两个步骤工作得很好。 Docker主机附加到本地Compose,构buildapp镜像, 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不存在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 )中使用它们各自的path匹配主机上的文件并在command执行该文件