在docker机上运行docker工人

我试图在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检查的时候,path很好,看起来像docker-compose仍然试图在我的本地机器上工作,当我提供一个本地存在的构buildpath时,它很高兴。 Docker本身在远程机器上执行命令。

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

我是新来的,所以希望我错过了一些微不足道的东西。 谢谢您的帮助!

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

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

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