【发布时间】:2019-06-28 09:52:29
【问题描述】:
我刚刚开始将 Docker 视为将我们的传统 C++ 服务器应用程序移动到容器中的一种方式(这样我们就可以在同一台物理机器上运行多个隔离的服务器)。这一切都很好(在我的 Windows 10 机器上),我可以准备图像并运行容器,一切正常。所以,然后我认为能够在容器内有一个小的 REST api 会很方便,这样外部客户端就可以找到有关正在运行的服务器/容器的信息。我找到了一个 c# api
https://github.com/microsoft/Docker.DotNet
使用这样的代码在本地工作
HttpContext.Current.Server.ScriptTimeout = 300;
DockerClient client = new DockerClientConfiguration(new Uri("npipe://./pipe/docker_engine")).CreateClient();
IList<ContainerListResponse> containers = await client.Containers.ListContainersAsync(
new ContainersListParameters()
{
Limit = 10,
});
所以,我进入 vs2017 创建一个 webapi 项目,打开 docker 支持并将代码的 sn-p 移动到控制器中,以便我可以查看是否可以查看主机运行容器。不幸的是,该命令只是给出了一个超时错误。我假设我必须做一些事情才能访问主机 docker 引擎。因此,我尝试将其添加到 docker-compose.yml 文件中
version: '3.4'
services:
serverinfoapp:
image: ${DOCKER_REGISTRY-}serverinfoapp
volumes:
- source: '\\.\pipe\docker_engine'
target: '\\.\pipe\docker_engine'
type: npipe
build:
context: .\ServerInfoApp
dockerfile: Dockerfile
但还是不行。
我是 Docker 的初学者,因此我们将不胜感激。
问候
【问题讨论】:
-
你得到什么错误?
-
我刚刚得到一个 System.TimeoutException: '操作已超时。'执行 client.Containers.ListContainersAsync 行时。我尝试在客户端配置 ctor 中添加时间跨度,但这没有帮助。
-
更常见的是通过环境变量传递所有外部信息,而不是让 pod “伸出”到它的控制器。例如,您可以为部署定义使用某种模板系统,该系统可以将映像版本(或其他)传递给 pod。
-
谢谢斯蒂芬。我确实通过使用.net核心让它最终工作。我现在只是在玩弄架构理念
标签: c# docker docker-for-windows