我正在尝试运行一次性命令来初始化一个新的docker swarm中的数据库模式,该数据库模式部署了1.13对docker-compose文件的新支持.
该群有以下网络:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
...
b7dptlu8zyqa vme_internal overlay swarm
...
Run Code Online (Sandbox Code Playgroud)
在docker-compose.yml文件中定义为:
networks:
internal:
Run Code Online (Sandbox Code Playgroud)
我运行的命令是
docker run --rm --network vme_internal app:0.1 db upgrade
Run Code Online (Sandbox Code Playgroud)
使用额外vme_前缀来自我在部署时给堆栈的名称.现在当我运行上面的命令时,我得到:
docker: Error response from daemon: Could not attach to network vme_internal:
rpc error: code = 7 desc = network vme_internal not manually attachable.
Run Code Online (Sandbox Code Playgroud)
如何使网络可连接?
也许我今天早上特别密集,但我试图从ListmacOS 上的 SwiftUI 中的a中删除一行。
问题是没有公开用于执行删除的 UI。我的意思是List它不响应删除按键,没有右键单击菜单,也不支持任何其他手势,例如滑动删除(无论如何在 macOS 上会很奇怪)。
这是我正在使用的示例:
import SwiftUI
struct ContentView: View {
@State var items = ["foo", "bar", "baz"]
@State var selection: String? = nil
var body: some View {
List(selection: $selection) {
ForEach(items, id: \.self) { Text($0) }
.onDelete { self.items.remove(atOffsets: $0)}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
Run Code Online (Sandbox Code Playgroud)
iOS 上完全相同的代码为我提供了一个带有标准“向左滑动以删除”UI 的表格视图。在 macOS 上什么都没有。
我尝试添加
.onDeleteCommand(perform: {
if let sel = self.selection, let idx = self.items.firstIndex(of: sel) {
self.items.remove(at: idx)
}
}) …Run Code Online (Sandbox Code Playgroud) 我正在使用带有其部署密钥的docker-compose文件版本3来运行群集(docker版本1.13),并且我想复制一项服务以使其再次具有弹性以应对单节点故障。
但是,当我添加这样的部署部分时:
deploy:
replicas: 2
Run Code Online (Sandbox Code Playgroud)
在我的四节点群集中,有时我最终将两个副本安排在同一节点上。我所缺少的是将两个实例安排在不同节点上的约束。
我知道global我可以使用一种模式,但是它将在每个节点上运行一个实例,即在我的情况下是四个实例,而不是两个。
是否有一种简单的方法可以以通用的方式指定此约束,而不必求助于global和标签的组合以使其他实例远离?
编辑:再次尝试后,这次我发现容器要安排在不同的节点上。我开始怀疑我是否有'node.hostname == X'约束条件。
编辑2:在另一个服务更新之后-并且没有任何放置限制-该服务再次在同一节点上调度(如ManoMarks Visualizer所示):
我有一个带有 configs 部分的 docker-compose 服务定义,如下所示:
# api.yml file
version: '3.3'
services:
api:
...
configs:
- source: api_config
target: /env.cfg
configs:
api_config:
file: ./config/my.cfg
Run Code Online (Sandbox Code Playgroud)
当我使用这个文件来驱动一个群时,即我部署它时docker stack deploy ...配置文件被正确提供到正在运行的容器中。
但是,当我尝试通过运行本地版本的 api 时,docker-compose -f api.yml up我收到启动失败,抱怨我的 api 服务找不到其配置。(注意:docker-compose 本身不会报告任何错误。)
是configs部分不与普通支持docker-compose使用?
尽管有些措辞似乎表明这仅适用于堆栈,但文档并未明确说明:
注意:config 必须已经存在或已在此堆栈文件的顶级 configs 配置中定义,否则堆栈部署将失败。
start-first很长一段时间以来,我一直在使用该选项将堆栈部署到集群中。
所以给出以下api.yml文件:
version: '3.4'
services:
api:
image: registry.gitlab.com/myproj/api:${VERSION}
deploy:
update_config:
order: start-first
Run Code Online (Sandbox Code Playgroud)
我会针对群管理器运行以下命令:
env VERSION=x.y.z docker stack deploy -f api.yml api
Run Code Online (Sandbox Code Playgroud)
这工作得很好 - 旧服务一直为请求提供服务,直到新服务完全可用。只有这样它才会被拆除并进入关机状态。
最近,我相信这开始发生在 docker v17.12.0-ce 或 v18.01.0-ce - 或者我之前没有注意到 - 相反发生的是旧服务有时没有正确停止。
当这种情况发生时,它会挂起并继续服务请求,导致我们无限期地并排运行新旧版本。
这既发生在复制了服务的集群上,也发生在使用scale=1.
更糟糕的是,我什至无法杀死旧容器。这是我尝试过的:
docker service rm api_apidocker stack rm api && docker stack deploy -f api.yml apidocker rm -f <container id>没有什么能让我摆脱“僵尸”容器。事实上,docker rm -f <container id>甚至锁上,只是坐在那里。
我发现摆脱它们的唯一方法是重新启动 node。多亏了复制,我实际上可以在不停机的情况下做到这一点,但由于各种原因,这不是很好,其中最重要的是如果另一位经理在我这样做时停机可能会发生什么。
有没有其他人看到过这种行为?可能是什么原因,我该如何调试?
我创建了一个度量标准,用于计算昨天数据集中的唯一ID,并将其拼入prometheus.所以说昨天的计数是100,这个值将在今天全天报告,直到明天,今天的计数将在明天报告.
到现在为止还挺好.现在,当我在Grafana中显示值100时,它会显示今天的日期,而实际值实际上是昨天的日期.
有没有办法简单地在Grafana中偏移x轴,-1d使日期和值再次对齐,即将刮削日期更改为"值"日期,如果可以的话?
我知道格拉法纳有一个"时间转移",但这只会抵消刮擦日期.我也知道prometheus''offset'运算符,它也会这样做.
我正在寻找的只是告诉Grafana它应该将'now'显示为'now-1d'.
我在仪表板上找到了一个标有"Now now now-"的设置.但是,这也不会移动x轴,也不会改变显示.
Grafana版本4.1.1,Prometheus版本1.5.3
所有VS Code默认主题(以及我见过的其他主题)在主视图和装订线之间均具有统一的背景色。这使得很难分辨您是否在一行的开头(或单击此处)。光标在这里行的开头吗?
对于缩进非常重要的Python,这尤其令人讨厌,一旦缩进混乱,您就不能简单地自动缩进块。
我经常发现自己粘贴一个块只是为了发现我离行的开头有一个空格,因此粘贴的块被抵消了。
只需将装订线设置为浅灰色背景即可解决此问题,但查看默认主题文件后,我看不到装订线的任何设置。我还从商店(材料)中查看了一个主题,该主题有一些与装订线颜色有关的键,但是更改它们没有任何作用。
有什么方法可以在VS Code中修改装订线背景颜色吗?
更新:VS Code 1.8版具有一个新设置来渲染线条高亮显示,当设置为“装订线”时可以对此有所帮助:
我通过docker swarm中的默认nginx配置(根据lets-nginx项目)通过lets-nginx运行nginx :
服务:
ssl:
image: smashwilson/lets-nginx
networks:
- backend
environment:
- EMAIL=sas@finestructure.co
- DOMAIN=api.finestructure.co
- UPSTREAM=api:5000
ports:
- "80:80"
- "443:443"
volumes:
- letsencrypt:/etc/letsencrypt
- dhparam_cache:/cache
api:
image: registry.gitlab.com/project_name/image_name:0.1
networks:
- backend
environment:
- APP_SETTINGS=/api.cfg
configs:
- source: api_config
target: /api.cfg
command:
- run
- -w
- tornado
- -p
- "5000"
Run Code Online (Sandbox Code Playgroud)
api是在群体覆盖网络的端口5000上运行的Flask应用backend。
最初启动服务时,一切正常。但是,每当我api以使api容器在三个节点群中的节点之间移动的方式进行更新时,都nginx无法将流量路由到新容器。
我在nginx日志中看到,当新容器现在位于10.0.0.4上时,它会粘贴到旧的内部ip,例如10.0.0.2。
为了使nginx“看到”新IP,我需要重新启动nginx容器,或者重新启动docker exec它并kill -HUP进入nginx进程。
有没有更好的自动方法来使Nginx容器刷新其名称解析?