小编sas*_*sas的帖子

当对码头群网络运行一次性命令时,"网络无法手动连接"

我正在尝试运行一次性命令来初始化一个新的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)

如何使网络可连接?

我在Docker网络中找不到任何关于可连接的具体信息,并尝试attachable在网络定义中添加属性而没有成功.

docker docker-compose docker-swarm

16
推荐指数
2
解决办法
1万
查看次数

macOS 上的 SwiftUI:如何为 onDelete 启用 UI(从列表中删除)

也许我今天早上特别密集,但我试图从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)

macos swiftui

7
推荐指数
3
解决办法
2847
查看次数

Docker群在不同节点上的副本

我正在使用带有其部署密钥的docker-compose文件版本3来运行群集(docker版本1.13),并且我想复制一项服务以使其再次具有弹性以应对单节点故障。

但是,当我添加这样的部署部分时:

deploy:
    replicas: 2
Run Code Online (Sandbox Code Playgroud)

在我的四节点群集中,有时我最终将两个副本安排在同一节点上。我所缺少的是将两个实例安排在不同节点上的约束。

我知道global我可以使用一种模式,但是它将在每个节点上运行一个实例,即在我的情况下是四个实例,而不是两个。

是否有一种简单的方法可以以通用的方式指定此约束,而不必求助于global和标签的组合以使其他实例远离?

编辑:再次尝试后,这次我发现容器要安排在不同的节点上。我开始怀疑我是否有'node.hostname == X'约束条件。

编辑2:在另一个服务更新之后-并且没有任何放置限制-该服务再次在同一节点上调度(如ManoMarks Visualizer所示):

在此处输入图片说明

docker docker-compose docker-swarm

6
推荐指数
2
解决办法
2908
查看次数

docker-compose 忽略 `configs:` 部分

我有一个带有 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 配置中定义,否则堆栈部署将失败。

docker docker-compose docker-swarm

6
推荐指数
1
解决办法
1792
查看次数

docker stack deploy 在更新后留下旧服务

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_api
  • docker stack rm api && docker stack deploy -f api.yml api
  • docker rm -f <container id>

没有什么能让我摆脱“僵尸”容器。事实上,docker rm -f <container id>甚至锁上,只是坐在那里。

我发现摆脱它们的唯一方法是重新启动 node。多亏了复制,我实际上可以在不停机的情况下做到这一点,但由于各种原因,这不是很好,其中最重要的是如果另一位经理在我这样做时停机可能会发生什么。

有没有其他人看到过这种行为?可能是什么原因,我该如何调试?

docker docker-swarm

6
推荐指数
1
解决办法
670
查看次数

在Grafana(Prometheus数据源)中对x轴应用一天偏移

我创建了一个度量标准,用于计算昨天数据集中的唯一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

grafana

5
推荐指数
1
解决办法
591
查看次数

如何在VS Code中更改装订线的背景颜色?

所有VS Code默认主题(以及我见过的其他主题)在主视图和装订线之间均具有统一的背景色。这使得很难分辨您是否在一行的开头(或单击此处)。光标在这里行的开头吗?

在此处输入图片说明

对于缩进非常重要的Python,这尤其令人讨厌,一旦缩进混乱,您就不能简单地自动缩进块。

我经常发现自己粘贴一个块只是为了发现我离行的开头有一个空格,因此粘贴的块被抵消了。

只需将装订线设置为浅灰色背景即可解决此问题,但查看默认主题文件后,我看不到装订线的任何设置。我还从商店(材料)中查看了一个主题,该主题有一些与装订线颜色有关的键,但是更改它们没有任何作用。

有什么方法可以在VS Code中修改装订线背景颜色吗?

更新:VS Code 1.8版具有一个新设置来渲染线条高亮显示,当设置为“装订线”时可以对此有所帮助:

在此处输入图片说明

在此处输入图片说明

visual-studio-code vscode-extensions vscode-settings

4
推荐指数
1
解决办法
1805
查看次数

Nginx不会自动获取群中的dns更改

我通过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容器刷新其名称解析?

nginx docker docker-swarm nginx-reverse-proxy

4
推荐指数
1
解决办法
1947
查看次数