在docker-machine上运行docker-compose

时间:2017-07-13 20:58:03

标签: docker amazon-ec2 docker-compose docker-machine

我尝试使用docker-machine和docker-compose在单个ec2实例上部署两个服务。

这就是我正在做的事情:

# cd /usr/lib/python2.7/dist-packages
# mv OpenSSL OpenSSLBAK

我收到此错误: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

docker-compose-prod.yml的相关部分:

build path /home/ubuntu/myapp/service1 either does not exist, is not accessible, or is not a valid URL.

通过ssh检查时路径很好,似乎docker-compose仍在尝试在我的本地计算机上工作,当我为它提供本地存在的构建路径时,它很高兴。 Docker本身在远程计算机上执行命令。

如何让docker-compose在远程docker-machine上运行?

我对此很陌生,所以希望我能错过一些微不足道的东西。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

docker build(包括docker-compose build)涉及"构建上下文"。此上下文是您选择从客户端发送到docker引擎(包括Dockerfile)以执行构建的所有文件。您可以使用.dockerignore文件从此上下文中删除文件。

当您运行docker build /home/ubuntu/myapp/service1或在您的情况下,在compose.yml文件中包含该目录时,您将/ home / ubuntu / myapp / service1定义为您从客户端发送到docker的构建上下文发动机。该引擎可以是本地引擎,也可以是远程节点,在您的情况下是ec2实例。从那里,一切都远程运行,包括Dockerfile中引用此上下文的任何COPYADD命令。

要远程运行构建,您可以将上下文保留在本地计算机上,而不是运行rm,或者您可以进入ec2实例并在该计算机上本地运行docker-compose命令(你可能需要在那里安装docker-compose,我不确定它是否包含在默认的机器映像中)。我的偏好通常是前者,因为它允许更容易地开发用于构建图像的文件,并且它允许远程docker机器是短暂的。