Docker-compose 和 Docker-swarm

Docker-compose and Docker-swarm

我正在使用 docker-compose 和 docker swarm。我创建了一个 docker-mgt 服务器,我从中创建了一个 docker-machine 来设置一个由 swarm master 和两个 swarm-agents 组成的 swarm 集群。

我创建了一个在容器中启动的 Express 应用程序,似乎 swarm master 决定将它放在 agent1 上。然后我还有一个 Wordpress 网站(来自 docker 撰写网站的示例),我 运行 docker-compose on Docker Swarm.

cloud-user@docker-mgt:~/wordpress$ docker-compose up
wordpress_db_1 is up-to-date
Creating wordpress_web_1
ERROR: Error: image library/wordpress_web:latest not found

以下图片可用:

cloud-user@docker-mgt:~/wordpress$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
orchardup/php5      latest              c385b8a81cee        18 months ago       330.1 MB
swarm               latest              a9975e2cc0a3        19 hours ago        17.15 MB
orchardup/mysql     latest              5a45a5a953bb        16 months ago       292.4 MB
wordpress_web       latest              e484f88dc8c8        11 minutes ago      350.9 MB
node-ip             latest              d177af00338b        39 minutes ago      549.5 MB
centos              centos6             1a895dd3954a        8 weeks ago         190.6 MB

所以它确实有 wordpress_web:latest 可用,但它仍然抱怨。

当 运行 这个 wordpress 应用程序在单独的 docker 主机(不是 swarm 集群的一部分)上时,它运行得很好。为了排除 wordpress 应用程序上的错误,我还尝试了另一个由两个容器组成的完全不同的应用程序(使用 docker-compose),这是完全相同的问题。

我开始认为 docker compose 和 swarm 不能顺利地协同工作,但这当然很难相信。

问题是 swarm 需要一些方法来将图像检索到 运行 容器。如果注册表(或 docker 集线器)中不存在图像,则它(当前)没有任何方法获取该图像,最终会出现此错误。

一种选择是用全名标记图像并将它们推送到中心。然后 swarm 将能够在所有节点上拉取图像。

另一种选择是使用 docker savedocker load 传播图像,这会将图像发送到所有节点。

另一种选择是添加 image affinity 以强制容器在具有图像的节点上 运行。

将来,swarm 应该能够在节点之间传播图像。

您可能想试用 Rancher,它使用 compose 并使跨多种类型的基础设施部署应用程序变得简单,同时保持本机 docker 语法并使用 compose。 GitHub Website