问题标签 [docker-stack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
19476 浏览

docker - 如何在 docker-compose 中更改 Docker 堆栈生成的服务名称

使用以下方式部署此撰写文件的堆栈时:

生成的服务名称将是myapp_service-name

我希望它被my-custom-service-name命名和引用

0 投票
2 回答
420 浏览

docker - 附加 docker stack deploy

docker-compose实用程序默认附加到终端,允许您查看所有容器的情况,这对于开发非常方便。docker stack deploy当正在运行的容器的活动在一个终端中实时呈现时,该命令是否支持这样的事情?

0 投票
2 回答
2596 浏览

mongodb - 在 docker swarm 中启动 MongoDB 副本集

我在部署为sudo docker stack deploy --with-registry-auth --compose-file docker-compose.yml test 的 docker -compose.yml文件中创建了两个副本集名称为rs0配置服务器

mongod.conf文件中的内容

当我尝试使用服务名称启动时

sudo docker exec -it $(sudo docker ps -qf label=com.docker.swarm.service.name=test_cfg1-r1) mongo --eval 'rs.initiate({ _id: "rs0", members: [{ _id: 1,主机:“cfg1-r1:27017”},{_id:2,主机:“cfg2-r1:27017”}],设置:{getLastErrorDefaults:{w:“多数”,wtimeout:30000}}})'

编辑我在初始化时忘记提及cfg2-r1。现在我添加了它。

它给出错误

编辑:我认为问题是 cfg1-r1 和 cfg2-r2 服务不在同一个网络中。当我部署堆栈文件时,会创建一个名为 mongo_mongoshard(overlay) 的网络,当我检查它时,它仅将 cfg1-r1 显示为容器列表中的容器。

0 投票
3 回答
3879 浏览

docker - docker stack 容器之间的通信

我正在尝试使用 docker 设置一个 swarm,但我在容器之间进行通信时遇到了问题。我有 5 个节点的集群。1名经理和4名工人。

3 个应用程序:redis、splash、myapp

myapp 必须在 4 名工人身上

redis,溅到经理身上

myapp 必须能够与 redis 和 splash 通信

我尝试使用容器名称,但它不起作用。它将容器名称解析为不同的 IP。

ping splash # return a different ip than the container actually has

我正在部署运行 swarm 使用docker stack

docker stack deploy -c docker-stack.yml myapp

它们之间的链接容器也不起作用。有任何想法吗 ?我错过了什么吗?

docker-stack.yml 包含:

- - 编辑 - -

我也试过卷曲。没用。 docker stack deploy -c docker-stack.yml myapp

curl http://myapp_splash:8050

curl: (7) Failed to connect to myapp_splash port 8050: No route to host

curl http://splash:8050

curl: (7) Failed to connect to splash port 8050: No route to host

有效的是获取 splash 的实际容器名称,这是一些随机生成的字符串。

curl http://myapp_splash.d7bn0dpei9ijpba4q41vpl4zz.tuk1cimht99at9g0au8vj9lkz:8050

但这并没有真正帮助我。

0 投票
0 回答
630 浏览

docker - Docker 堆栈:将端口发布到主机

问题

运行时$ docker stack deploy ...,有没有办法以只有主机可以访问的方式发布端口?

我目前正在使用在 Digital-Ocean 上运行的 Ubuntu 服务器实例。

例子

假设我运行一个名为db的mysql服务。我可以从不同的容器访问数据库,而无需我的文件中。从我的另一个容器中,我可以将db用作 mysql 主机和默认端口。这按预期工作。ports: ["3306:3306"]docker-compose.yml

现在我想从我的主机访问数据库。据我所知,如果不发布端口,这是不可能的。当我放入ports: ["3306:3306"]我的docker-compose.yml文件时,我可以使用mysql -uroot -p -h 127.0.0.1. 问题是数据库现在也可以从外部访问,我可以从任何 PC 使用 登录到数据库mysql -uroot -p -h foo.com,这似乎是不必要的不​​安全。

我可以想到一些您可能需要它的其他用例:

  • 使用需要由 docker 容器访问的任何数据库,也可以从 docker 之外的应用程序访问。
  • 使用不在 docker 中运行的 nginx 作为在 docker中运行的应用程序的反向代理。无需将应用程序本身暴露给网络

如果这些用例可以使用其他解决方案来解决,我当然很乐意听到。

我尝试过的一些事情

  • 使用防火墙阻止对端口 3306 的访问。这不起作用,因为 docker 与 ip-tables 混淆。
  • ports: ["127.0.0.1:3306:3306"]在撰写文件中使用。当用户docker-compose up. 不幸的是,这在使用 Docker 堆栈时不起作用。
  • 许多其他可能的解决方案都没有导致任何地方......
0 投票
0 回答
137 浏览

docker - 使用 Docker Stack 从容器内访问 Localhost

我有一个在 Azure 中运行的 VM,我正在尝试从容器内连接到 VM 上的端口。

docker run -it --net="host" managed-service-identity只需运行容器,我就可以按预期执行类似的操作。

如何在 docker stack 下复制它?

0 投票
1 回答
143 浏览

amazon-web-services - 如何为 Docker Cloud 编写堆栈文件?

我的主要目标是将我的Laravel 5.1站点部署到我docker cloud的 viadocker stack中。

  • 我已经将我的 DockerCloud 帐户与我的 AWS 帐户连接起来。
  • 我已经有了 :

    1. 码头工人-compose.yml
    2. 应用程序.docker文件
    3. web.docker文件

码头工人-compose.yml


应用程序.docker文件


web.docker文件


虚拟主机配置文件


结果

在此处输入图像描述

http://localhost:85

它在本地工作得很好

在此处输入图像描述

目标

在此处输入图像描述

有了我得到的所有 docker 文件,我如何为 Docker Cloud 编写堆栈文件?

0 投票
3 回答
20995 浏览

docker - docker stack deploy 导致“没有这样的图像错误”

我正在使用 docker swarm 并希望使用docker-compose. 我的服务使用了一个名为myuser/myrepo:mytag我成功部署到 Docker-Hub 到私有存储库的自定义映像。

我的 docker-compose 看起来像这样:

在执行之前,我成功地提取了图像:docker pull myuser/myrepo:mytag

当我运行时,docker stack deploy -c docker-compose.yml myapp我总是收到错误:"No such image: myuser/myrepo:mytag".

有趣的是,仅使用以下方式运行相同的文件:(docker-compose up即没有 swarm 模式)一切正常,服务启动。

我真的不明白为什么这会失败?我已经尝试使用清理docker system prunedocker 然后重新拉取我的图像,但没有成功。

0 投票
3 回答
4816 浏览

docker - 连接到远程 docker 主机/部署堆栈

我创建了一个 docker 堆栈来部署到一个 swarm。现在我有点困惑如何将它部署到真实服务器上?

当然,我可以

  1. scp我的docker-stack.yml文件到我的集群的一个节点
  2. ssh进入节点
  3. docker stack deploy -c docker-stack.yml stackname

所以有docker-machine我想的工具。我试过了

如果您在没有 TLS 的情况下打开端口,什么似乎才有效?我收到以下信息:

我已经尝试生成证书并将其复制到主机:

然后我跑了

结果如下:

我也用通用驱动程序尝试过

如何使用 TLS 正确添加带有 docker-machine 的远程 docker 主机?或者有没有更好的方法将堆栈部署到服务器/投入生产?

我经常读到你不应该公开 docker 端口,但不应该公开一次。我不敢相信他们没有提供一种简单的方法来做到这一点。

更新与解决方案

我认为这两个答案都有资格。我发现Deploy to Azure 官方文档(AWS 也是一样)。@Tarun Lalwani 的回答为我指明了正确的方向,这几乎是官方的解决方案。这就是我接受他的回答的原因。

对我来说,以下命令有效:

然后你可以运行:

或者

@BMitch 的回答也是有效的,他提到的安全问题不容忽视。

更新 2

@bretf 的答案是连接到您的 swarm 的绝佳方式。特别是如果你有不止一个。它仍然是测试版,但适用于互联网上可用且没有 ARM 架构的群。

0 投票
1 回答
101 浏览

docker - Docker Swarm - 仅在本地环境中使用 mongo 服务

所以我了解到,您可以将相同的 docker-compose 文件用于 docker-machine 的本地开发和使用 docker swarm 的生产环境,这很棒,您还可以共享相同的 docker-compose 文件并为生产添加特定配置/本地环境。

有人认为我无法找到一种仅在本地环境中定义服务的方法,我在本地编写文件,其中包含 redis/node/nginx/mongo 容器但在生产中我不想将 docker 用于 mongo,因为我使用外部服务器(Atlas / MLab),是否可以这样做并继续使用相同的文件进行生产和开发?