我正在尝试使用docker-machine和docker-compose在单个ec2实例上部署两个服务。
这就是我要做的:
docker-machine create --driver amazonec2 --engine-install-url=https://web.archive.org/web/20170623081500/https://get.docker.com mymachine
docker-machine ssh mymachine -- mkdir -p /home/ubuntu/myapp
git clone https://github.com/myapp/service1.git
docker-machine scp -r ./service1 mymachine:/home/ubuntu/myapp/
rm -rf ./service1
git clone https://github.com/myapp/service2.git
docker-machine scp -r ./service2 mymachine:/home/ubuntu/myapp/
rm -rf ./service2
docker-machine env mymachine
//export DOCKER_TLS_VERIFY="1"
//export DOCKER_HOST="something"
//export DOCKER_CERT_PATH="something"
//export DOCKER_MACHINE_NAME="mymachine"
eval $(docker-machine env mymachine)
docker-machine active
//mymachine
docker-compose -f ./docker-compose-prod.yml up -d我得到这个错误:build path /home/ubuntu/myapp/service1 either does not exist, is not accessible, or is not a valid URL.
docker-compose-prod.yml相关部分:
version: '3'
services:
service1:
build: /home/ubuntu/myapp/service1
service2:
build: /home/ubuntu/myapp/service2当通过ssh检查时,路径是正常的,看起来docker-compose仍然在我的本地机器上工作,当我为它提供一个本地存在的构建路径时,它会很高兴。Docker本身在远程机器上执行命令。
如何让docker-compose在远程docker机器上运行?
我是新手,所以希望我错过了一些微不足道的东西。谢谢你的帮助!
发布于 2017-07-23 18:45:19
一个docker build (包括docker-compose build)包含一个“构建上下文”。此上下文是您选择从客户端发送到docker引擎以执行构建的所有文件,包括Dockerfile。您可以使用.dockerignore文件从此上下文中删除文件。
当您运行docker build /home/ubuntu/myapp/service1或在本例中将该目录包含在compose.yml文件中时,您将/home/ubuntu/myapp/service1定义为您从客户端发送到docker引擎的构建上下文。该引擎可以是本地或远程节点,在本例中是ec2实例。从那里,一切都可以远程运行,包括Dockerfile文件中引用此上下文的任何COPY或ADD命令。
要远程运行构建,您可以将上下文保留在本地计算机上,而不是运行rm,或者您可以ssh进入ec2实例并在该计算机上本地运行docker-compose命令(您可能需要在那里安装docker-compose,我不确定它是否包含在默认的机器映像中)。我通常倾向于前者,因为它允许在用于构建映像的文件上进行更容易的开发,并且它允许远程docker机器是短暂的。
https://stackoverflow.com/questions/45090766
复制相似问题