1

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

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

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 可用,但它仍然抱怨。

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

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

4

2 回答 2

3

您可能想尝试一下 Rancher,它使用 compose 并使得在广泛类型的基础设施中部署应用程序变得简单,同时保持原生 docker 语法和使用 compose。 GitHub 网站

于 2015-12-11T01:09:18.777 回答
1

问题是 swarm 需要某种方法来检索图像以运行容器。如果镜像不存在于注册表(或 docker hub)中,那么它(当前)没有任何方法来获取该镜像,并且您最终会出现此错误。

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

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

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

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

于 2015-12-10T22:59:11.160 回答