我是docker容器的新手,请问我问过之前已经解决的问题,但是我找不到与该特定问题相关的任何信息。
我已经创建了一个自定义映像,该映像可以为运行WCF服务做好一切准备,而且还可以运行一个容器,将服务发布到本地端口,并且一切正常。因为我需要根据接收到的请求数量按比例缩放服务,所以我继续创建Docker服务,以便可以在Docker Swarm中创建该服务的副本,并且可以根据需要按比例缩放服务。 。但是,当我使用与以前相同的图像创建服务时,我无法使其正常工作,并不断收到下一个错误:
我使用的命令行是下一个:
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服务,以便客户端可以向该终结点发出请求,并且可以放大在任何给定时刻存在的容器数量或根据需要降低。我是否按预期进行?我理解正确吗?我想做的事可能是我想做的事吗?
非常感谢您。
答案 0 :(得分:0)
我已经解决了。要求Docker容器始终具有一个EntryPoint才能使该容器保持活动状态。我用于创建容器的图像(Microsoft Hub的官方WCF图像)具有一个EntryPoint可执行文件,称为ServiceMonitor.exe,该文件监视IIS服务。由于某些我仍然不知道的原因,该服务仅在该服务在其中创建容器的服务时才失败。如果我在服务之外运行容器,则容器运行良好。因此,我改写了WCF图像的EntryPoint并设置了自己的。现在,服务中的容器和副本一直处于活动状态,并且一直在运行。
Tl; dr只要容器的EntryPoint进程正在运行,该容器就会处于活动状态。如果停止,则容器也将停止。