如何使用 Docker.DotNet 启动容器 (NET CORE)

How to start container with Docker.DotNet (NET CORE)

我尝试使用 NET CORE 包 https://github.com/dotnet/Docker.DotNet 从 NET CORE 启动 docker 容器。

通常我的命令行看起来像

sudo docker run -it \
--name digiwage.$(date +%Y-%m-%d-%H.%M.%S) \
--expose='46003' \
-e RPC_PASSWORD=$(xxd -l 32 -c 32 -p /dev/urandom) \
-e EXTERNAL_IP='157.XX.XX.85' \
-e MASTERNODE_PRIV_KEY='51kWXqrknGeLLEqnUgRBPtrBxQ3o5VBp4bkRy4fHN3ZpzURHdkr' \
-e TX_INDEX='1' \
-e SEED_NODE='95.XX.XX.73' \
-e PORT='46003' \
-e RPC_ALLOW_IP='127.0.0.1' \
-e RPC_CONNECT_IP='127.0.0.1' \
-p '157.XX.XX.85:46003:46003' \
XXXXXX/daemon:latest

有限制示例,如何启动它https://github.com/dotnet/Docker.DotNet/blob/master/test/Docker.DotNet.Tests/IContainerOperationsTests.cs

但是文档中没有要点。首先,docker 文档 https://docs.docker.com/engine/reference/run/#expose-incoming-ports docker 有两个与端口相关的参数

  --expose=[] Expose a port or a range of ports inside the container
  -p=[] Publish a container's port or a range of ports to the host

不幸的是,我在 Docker.DotNet 中没有看到两个与端口相关的不同参数。

第二期,我的代码只生成容器模板而不是工作容器。

    Dim Env = New List(Of String)({"RPC_PASSWORD=$(xxd -l 32 -c 32 -p /dev/urandom)",
                                   "EXTERNAL_IP='157.XX.XX.85'",
                                   "MASTERNODE_PRIV_KEY='51kWXqrknGeLLEqnUgRBPtrBxQ3o5VBp4bkRy4fHN3ZpzURHdkr'",
                                   "TX_INDEX='1'",
                                   "SEED_NODE='95.XX.XX.73'",
                                   "PORT='46004'",
                                   "RPC_ALLOW_IP='127.0.0.1'",
                                   "RPC_CONNECT_IP='127.0.0.1'"})
    Dim ExposedPorts = New Dictionary(Of String, EmptyStruct)
    ExposedPorts.Add("'157.XX.XX.85:46004:46004'", New EmptyStruct)
    Dim Prm = New CreateContainerParameters With {
                  .Image = "alexev275/digiwage:latest",
                  .Name = $"digiwage.{Guid.NewGuid}",
                  .Env = Env,
                  .ExposedPorts = ExposedPorts,
                  .Tty = True
    }
    Dim CreateContainer As CreateContainerResponse = DockerHub.Containers.CreateContainerAsync(Prm).Result
    Dim StartResTask As Task(Of Boolean) = DockerHub.Containers.StartContainerAsync(CreateContainer.ID, New ContainerStartParameters())
    StartResTask.Wait()

我没有收到错误或警告,只有 Status=RunToCompletion 和没有启动的容器模板。

如何通过https://github.com/dotnet/Docker.DotNet真正启动容器?
以及如何设置正确的参数 --expose=[] 和 -p=[] ?

这里有两个问题:

  1. 您的容器在您启动后立即退出

  2. 你不知道如何暴露端口

那应该是两个不同的问题。

无论如何,您需要找到容器日志并阅读任何 errors/messages 记录以找出如何解决问题 1。它可能与 RPC_PASSWORD=$(xxd -l 32 -c 32 -p /dev/urandom) 有关,它由 [= 评估28=] 生成随机密码,但它是 .NET 中的文字字符串。