问题标签 [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.
docker - 如何在 docker-compose 中更改 Docker 堆栈生成的服务名称
使用以下方式部署此撰写文件的堆栈时:
生成的服务名称将是myapp_service-name
我希望它被my-custom-service-name命名和引用
docker - 附加 docker stack deploy
该docker-compose
实用程序默认附加到终端,允许您查看所有容器的情况,这对于开发非常方便。docker stack deploy
当正在运行的容器的活动在一个终端中实时呈现时,该命令是否支持这样的事情?
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 显示为容器列表中的容器。
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
但这并没有真正帮助我。
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 堆栈时不起作用。- 许多其他可能的解决方案都没有导致任何地方......
docker - 使用 Docker Stack 从容器内访问 Localhost
我有一个在 Azure 中运行的 VM,我正在尝试从容器内连接到 VM 上的端口。
docker run -it --net="host" managed-service-identity
只需运行容器,我就可以按预期执行类似的操作。
如何在 docker stack 下复制它?
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 prune
docker 然后重新拉取我的图像,但没有成功。
docker - 连接到远程 docker 主机/部署堆栈
我创建了一个 docker 堆栈来部署到一个 swarm。现在我有点困惑如何将它部署到真实服务器上?
当然,我可以
scp
我的docker-stack.yml
文件到我的集群的一个节点ssh
进入节点- 跑
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 架构的群。
docker - Docker Swarm - 仅在本地环境中使用 mongo 服务
所以我了解到,您可以将相同的 docker-compose 文件用于 docker-machine 的本地开发和使用 docker swarm 的生产环境,这很棒,您还可以共享相同的 docker-compose 文件并为生产添加特定配置/本地环境。
有人认为我无法找到一种仅在本地环境中定义服务的方法,我在本地编写文件,其中包含 redis/node/nginx/mongo 容器但在生产中我不想将 docker 用于 mongo,因为我使用外部服务器(Atlas / MLab),是否可以这样做并继续使用相同的文件进行生产和开发?