Docker Service作为端点公开了WCF服务,该服务接收具有许多副本的参数

时间:2019-09-17 15:54:14

标签: docker wcf docker-swarm

我是docker容器的新手,请问我问过之前已经解决的问题,但是我找不到与该特定问题相关的任何信息。

我已经创建了一个自定义映像,该映像可以为运行WCF服务做好一切准备,而且还可以运行一个容器,将服务发布到本地端口,并且一切正常。因为我需要根据接收到的请求数量按比例缩放服务,所以我继续创建Docker服务,以便可以在Docker Swarm中创建该服务的副本,并且可以根据需要按比例缩放服务。 。但是,当我使用与以前相同的图像创建服务时,我无法使其正常工作,并不断收到下一个错误:

enter image description here

我使用的命令行是下一个:

import Foundation

protocol A {
    associatedtype AModel
    associatedtype TypedB: B where TypedB.BModel == AModel
    var another: TypedB { get }
}

protocol B {
    associatedtype BModel
    func doAnother(anotherModel: BModel)
}

// compiles

struct One: B {
    typealias BModel = String
    func doAnother(anotherModel: String) {}
}

struct Second: A {
    typealias AModel = String
    typealias TypedB = One
    var another: One
}

// does not compile

struct Third: B {
    typealias BModel = Int
    func doAnother(anotherModel: Int) {}
}

struct Fourth: A { // A' requires the types 'Fourth.AModel' (aka 'String') and 'Third.BModel' (aka 'Int') be equivalent
    typealias AModel = String
    typealias TypedB = Third
    var another: Third
}

我认为Docker服务将要做的事就是创建运行指定镜像的容器,其数量应与创建该镜像时指定的副本数量相同,并且还要发布该服务,以便您可以向该本地发出请求端口(Docker服务端点),然后在所有这些副本之间相应地路由请求。

我要实现的目标是公开一个容器的许多副本,该容器具有可接收参数的WCF服务,以便客户端可以向该终结点发出请求,并且可以放大在任何给定时刻存在的容器数量或根据需要降低。我是否按预期进行?我理解正确吗?我想做的事可能是我想做的事吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我已经解决了。要求Docker容器始终具有一个EntryPoint才能使该容器保持活动状态。我用于创建容器的图像(Microsoft Hub的官方WCF图像)具有一个EntryPoint可执行文件,称为ServiceMonitor.exe,该文件监视IIS服务。由于某些我仍然不知道的原因,该服务仅在该服务在其中创建容器的服务时才失败。如果我在服务之外运行容器,则容器运行良好。因此,我改写了WCF图像的EntryPoint并设置了自己的。现在,服务中的容器和副本一直处于活动状态,并且一直在运行。

Tl; dr只要容器的EntryPoint进程正在运行,该容器就会处于活动状态。如果停止,则容器也将停止。