如何使用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
执行该文件