RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-205151

S.H.'s questions

Martin Hope
S.H.
Asked: 2025-03-27 21:18:08 +0000 UTC

Visual Studio 拼写检查器 - 如何切换到俄语?

  • 7

Visual Studio 中有这样一个拼写检查器:

EWSoftware 的 Visual Studio 拼写检查器(VS2022 及更高版本)。

https://marketplace.visualstudio.com/items?itemName=EWoodruff.VisualStudioSpellCheckerVS2022andLater

在 github 上:

https://github.com/EWSoftware/VSSpellChecker

从整体外观和下载次数来看,该软件还不错。

但我认为它的界面很糟糕。

大约一年前我尝试过使用它,但无法让它检查俄语——我需要检查代码中的注释。

尽管有任何指示,他仍然固执地尝试在英文词典中查找它们。

这是我所做的:

我进入工具->拼写检查器->编辑全局配置

我在那里找到了词典设置,并在全局词典中选择了俄语词典。按 Ctrl+S 保存所选设置。

此后,什么都没有改变:任何俄语单词都会被划线表示为错误,而且很明显,检查是使用英语词典进行的。 (见图)

Visual Studio 拼写检查器

我浏览了所有帮助页面,并在 YouTube 上寻找视频 -(但没有找到)。我不明白该如何告诉他“用俄语检查!”

有人有安装此软件的经验吗?谢谢。

visual-studio
  • 1 个回答
  • 41 Views
Martin Hope
S.H.
Asked: 2024-11-20 14:23:53 +0000 UTC

FastAPI:如何将应用程序托管和静态文件结合起来?

  • 6

这里我使用 FastAPI 编写“Hello world”:

main.py 文件说

import uvicorn
from fastapi import FastAPI

app = FastAPI()

if __name__ == '__main__':
    uvicorn.run("main:app", host='0.0.0.0', port=80, reload=True)

@app.get("/api")
async def root():
    return {"message": "Hello World"}

在此之前我安装了依赖项

pip install fastapi
pip install uvicorn

一切都很好,我启动了应用程序python main.py,当我通过 url 输入浏览器时,http://127.0.0.1/api我收到了珍贵的 json{"message":"Hello World"}

然后我添加静态文件托管:我创建一个静态目录,将 index.html 放在那里并添加一些行,然后更改我的 python 文件,如下所示:

import uvicorn
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

app = FastAPI()
app.mount('/', StaticFiles(directory='static',html=True))

if __name__ == '__main__':
    uvicorn.run("main:app", host='0.0.0.0', port=80, reload=True)

@app.get("/api")
async def root():
    return {"message": "Hello World"}

同时,托管静态文件对我有用 - http://127.0.0.1/index.html 通过 url 打开,但是......对同一 url 的请求http://127.0.0.1/api停止工作

此外,如果我将设置静态文件路由的行更改为

app.mount('/static/', StaticFiles(directory='static',html=True))

那么两个请求,byhttp://127.0.0.1/static/和 by http://127.0.0.1/api- 都会正常工作。

似乎存在路由冲突:沿较短路径的路由/“中断”沿该路径的路由/api

我如何确保 index.html 已加载,并且位于“短”url 处http://127.0.0.1/,并且我的 api 也能正常http://127.0.0.1/api工作?

让我解释一下:我想基于FastAPI制作一个“穷人网站”:这样就可以从中加载带有JS的页面,加载后开始访问api

谢谢你!

python
  • 1 个回答
  • 33 Views
Martin Hope
S.H.
Asked: 2024-11-12 15:43:00 +0000 UTC

C#、ConfigurationBuilder 和类型化值

  • 8

我不明白为什么当标准读取 json 配置文件时,配置参数以字符串形式出现,无论它们如何写入 json 文件。

让我解释一下。

在这里,我在 NET Core 8 上创建一个标准控制台项目,在那里添加依赖项Microsoft.Extensions.Configuration并Microsoft.Extensions.Configuration.Json

然后我直接写到Main

    var builder = new ConfigurationBuilder().AddJsonFile("appSettings.json", false, false);
    var configuration = builder.Build();

    var rc = configuration["retryCounter"];

然后我添加 appSettings.json ,上面写着

{
    "retryCounter": 42
}

...在代码中我得到一个值为“42”的字符串:

线

这是我不明白的地方:

  1. 我们的 json 已经输入了。是的,只有原始类型,但是数量

     "retryCounter": 42    
    

与字符串不同

    "retryCounter": "42"
  1. 如果我使用我自己的类,某种MySettings.cs带有其中描述的字段的类,并将其序列化 - 将其反序列化为 json - 那么我将进行到 json 的转换并返回,保留基本类型(int、string、float)

  2. 同时,使用配置和ConfigurationBuilder是推荐的方式。也就是说,如果你做错了,那么在合适的地方他们会给你一个耳光。

那么为什么这个推荐路径如此有限并且与使用 ini 文件没有什么不同呢?这里有什么我不明白的意思吗,或者只是“世界上所有的数据都是字符串,我们不应该欺骗自己”?

c#
  • 1 个回答
  • 61 Views
Martin Hope
S.H.
Asked: 2024-09-23 17:50:16 +0000 UTC

在 div 中滚动 - 不出现

  • 6

我有一个复杂的 Web 应用程序,其中嵌入了一个包含表格的小 div。也就是说,从字面上看,在应用程序页面上有一个“窗口”(其大小固定为浏览器窗口的百分比,正如我从外部标志中了解到的那样),我需要在其中显示一个具有可变行数的表格。

当然,我希望当 div 中有大量行时出现垂直滚动条。

我正在为此 div 创建 html 和 css 代码

div很简单,这是它的所有代码:

    <div id='myspan' class='scroll'><h3>Список финтифлюшек</h3>
    <table class="topTableClass">
        <thead>
            <tr>
                <th>Дата</th>
                <th>Название</th>
                <th>ID проблемы</th>
                <th>Статус1</th>
                <th>→</th>
                <th>Статус2</th>
            </tr>
        </thead>
    <tbody>    <tr class='trCls'><td>04.09.2024 10:09</td><td>Инфраструктура_ ЦПЛ</td><td>TR000000001023</td><td>Оценка - валидация СН</td><td>→</td><td>Анализ</td>
    </tr>
        <tr class='trCls'><td>04.09.2024 21:00</td><td>Тестовый сервис</td><td>000000001946</td><td>Недоступность функций из-за исчерпания ресурсов на виртуальном сервере</td><td>→</td><td>Отказ виртуального сервера</td>
    </tr>
        <tr class='trCls'><td>04.09.2024 21:00</td><td>Тестовый сервис</td><td>000000001947</td><td>Недоступность функций из-за сбоя или некорректной работы подключения к сети Интернет</td><td>→</td><td>Невозможность соединения</td>
    </tr>
        <tr class='trCls'><td>04.09.2024 21:00</td><td>Тестовый сервис</td><td>000000001948</td><td>Недоступность функций из-за исчерпания ресурсов СУБД</td><td>→</td><td>Невозможность работы с БД</td>
    </tr>
    </tbody>
    </table>
    </div>

并且该表中的行数是可变的。

对于滚动类,在我看来,我也正确地完成了所有操作,如下所示:

    .scroll {
        overflow: scroll;
        overflow-y: scroll;
        overflow-x: scroll;
    }

然后发生以下情况:当我测试我的 div 时,一切正常,调用栏出现。但它不会出现在“真实”页面上。

我不太了解CSS,但我怀疑在“更高级别的块”之一中,滚动可能会以某种方式“全局取消”。

请告诉我如何尝试解决这个问题?谢谢。

附言。我知道关于最低限度可重现示例的规则,但我不知道如何从整个 Web 应用程序中“剪切”示例页面

html
  • 1 个回答
  • 60 Views
Martin Hope
S.H.
Asked: 2024-07-03 18:07:19 +0000 UTC

如何以编程方式创建js脚本并将其插入到文档中?

  • 5

我创建一个脚本并使用如下代码将其插入到文档中(我之前的问题):

var my_script = document.createElement('script');
my_script.setAttribute('type','text/javascript');
my_script.setAttribute('src','https://mysite.ru/storage/script.js');
document.head.appendChild(my_script);
my_script.addEventListener('load', _ => function_onload());

这就是它的工作原理。

但我需要使任务复杂化。

现在我没有任何可以下载脚本的服务器。

也就是说,src不会设置该属性。

一切都需要“此时此地”完成,也就是说,我可以(使用 Web 服务)接收脚本文本作为字符串 ( scriptBody)。

现在我有机会创建一个脚本,将其插入页面,并以代码的形式拥有它的“主体”......

现在我怎么知道var my_script = document.createElement('script');创建的脚本 ( ) 具有这样那样的主体?

我试过:

my_script.append(scriptBody);

和

my_script.source = scriptBody;

和

my_script.innerHTML = scriptBody;

由于某种原因,这不起作用。

我检查了它不起作用,我这样做了:我做了一个小index.html:

<html>
<head>
    <script>

    function body_onload(){
        var my_script_body = 'function myScriptFunction(){ alert(\'Hi from myScriptFunction!\'); }';
        var my_script = document.createElement('script');
        my_script.setAttribute('type','text/javascript');
        //my_script.innerText = my_script_body;
        my_script.innerHTML = my_script_body;
        document.head.appendChild(my_script);
        my_script.addEventListener( 'load', _ => myScriptFunction() );
    }

    </script>
</head>
<body onload='body_onload();'>
<h4>
    Это пример, казалось бы, простой функциональности
</h4>
</body>
</html>

另外,我尝试简单地在浏览器调试控制台中按 my_script 之后的点,然后查看对象的属性my_script- 不,我不知道如何将其主体分配给脚本。

告诉我,如何将其代码分配给创建的脚本?(脚本主体)

谢谢你!

javascript
  • 1 个回答
  • 51 Views
Martin Hope
S.H.
Asked: 2024-07-02 16:32:36 +0000 UTC

通过 document.head.appendChild(my_script) 插入脚本后如何执行脚本?

  • 6

我就遇到了这个困难。

我使用以下代码加载脚本(并将其添加到页面):

    var my_script = document.createElement('script');
    my_script.setAttribute('type','text/javascript');
    my_script.setAttribute('src','https://mysite.ru/storage/script.js');
    document.head.appendChild(my_script);
    function_onload();

在本例中,最后一行function_onload()是对已加载脚本中已有函数的调用。在这一行我得到一个错误

    polyfills-es5.js:1 Uncaught ReferenceError: function_onload is not defined

哦,那好吧。

添加脚本()的操作document.head.appendChild(my_script)是异步的,在我调用该函数的那一刻function_onload,它还没有完成。

我尝试了不同的方法:

写道

    my_script.async = false;

在通话之前my_script.setAttribute,(这没有影响任何事情)

尝试重写风格的最后一行

    document.head.appendChild(my_script)
    .then ( () => function_onload() );

在执行此操作时,我收到另一个错误 -TypeError: document.head.appendChild(...).then is not a function

当然,您可以“设置闹钟”(设置计时器),但这是一个非常不可靠的解决方案......

在这种情况下可以做什么呢?您如何知道脚本已经下载并准备好执行?

谢谢。

javascript
  • 2 个回答
  • 35 Views
Martin Hope
S.H.
Asked: 2023-12-09 16:04:31 +0000 UTC

如何在Windows Server 2016上安装winget?

  • 6

Windows 有自己的包管理器,我想在其中一台测试服务器(Windows Server 2016)上使用它

但问题就在这里。Winget 本身需要从某个地方安装。

我读了reddit 上的讨论

归根结底,您需要下载扩展名为 .msixbundle 的文件,然后双击它......应用程序安装程序应该启动!

没有这样的程序吗?没问题。从 Windows 应用商店获取它。哦,您有一台服务器,但那里没有 Windows 应用商店?

然后在PowerShell中运行命令

    Add-AppxPackage -Path Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

但是如果这个命令出错了怎么办

    Add-AppxPackage : Deployment failed with HRESULT: 0x80073CF0, Package could not be opened.
    error 0x8007007B: Opening the package from location Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle failed.
    NOTE: For additional information, look for [ActivityId] 5b68f429-2386-0000-d0ee-765b8623da01 in the Event Log or use
    the command line Get-AppxLog -ActivityID 5b68f429-2386-0000-d0ee-765b8623da01
    At line:1 char:1
    + Add-AppxPackage -Path Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msi ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OpenError: (C:\Distrib\Micr...bbwe.msixbundle:String) [Add-AppxPackage], FileNotFoundExc
       eption
        + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand

我在任何地方都没有找到这个

有高级诊断请求,但事件日志中的条目没有澄清任何内容:

    PS C:\Distrib> Get-AppxLog -ActivityID 99f74e13-2a5e-0001-dc57-f7995e2ada01

    Time                      ID           Message
    ----                      --           -------
    12/9/2023 10:51:54 AM     301          The calling process is powershell.exe
    12/9/2023 10:51:54 AM     603          Started deployment Add operation on a package with main parameter:
                                           Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle and Options: 0. See
                                           http://go.microsoft.com/fwlink/?LinkId=235160 for help diagnosing app
                                           deployment issues.
    12/9/2023 10:51:54 AM     164          The app bundle signature was validated for core content of the app bundle
                                           published by CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond,
                                           S=Washington, C=US. App packages won't be validated until they are read.
    12/9/2023 10:51:54 AM     465          error 0x8007007B: Opening the package from location
                                           Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle failed.
    12/9/2023 10:51:54 AM     403          error 0x8007007B: Failure to get staging session for:
                                           file:///C:/Distrib/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle.
    12/9/2023 10:51:54 AM     404          AppX Deployment operation failed for package  with error 0x80073CF0. The
                                           specific error text for this failure is: error 0x8007007B: Opening the package
                                           from location Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle failed.

有没有人遇到过这个问题并以某种方式解决了这个问题?

谢谢。

windows
  • 1 个回答
  • 22 Views
Martin Hope
S.H.
Asked: 2022-09-26 20:00:05 +0000 UTC

C#、Winforms 和 WebBrowser:为什么不解析样式?

  • 0

我正在尝试为我的应用程序制作一个“便宜又愉快”的闪屏。(NET Framework 4.8 上的 WinForms 应用程序)

这个想法很简单:在加载数据时,我们显示 WebBrowser 元素,该元素 Navigate() 到一些预先准备好的 URL,并带有图片“等待,正在加载!”

但这就是问题所在。

加载数据时的这个铭文只是一张图片(其实是一个gif动画,这样用户才不会觉得无聊)

在我的浏览器中,此图像显示在屏幕中央:

但在应用程序中- 不,它显示在左上角,好像WebBrowser 控件(System.Windows.Forms.WebBrowser)不理解样式。

不在中心

要在浏览器中显示的源 html:

<!DOCTYPE html>
<html>
<head>
</head>
<body style="min-height: 100vh;" bgcolor="red">
    <div style="display: flex; justify-content: center; align-items: center; height: 100%; min-height: 100vh;">
    <img src="BackgroundLoad.gif">  
    </div>
</body>

</html>

我如何在表单上显示浏览器:我只处理 Shown 事件,并将代码写入其中

        WebBrowser wb = new WebBrowser();
        Controls.Add(wb);
        wb.Dock = DockStyle.Fill;
        wb.Navigate(new Uri("https://junecat.ru/Storage/oth/BackgroundLoad.html"));

以防万一,这里是github 上项目的链接。

我不知何故不知道为什么 WebBrowser 会这样。你呢?

c#
  • 1 个回答
  • 13 Views
Martin Hope
S.H.
Asked: 2022-08-10 19:53:07 +0000 UTC

在 Docker 容器中安装 NET Core SDK 6.0:他们在开玩笑吗?

  • 1

对于这个问题的标题有些令人震惊,我深表歉意。

问题是由此引起的:我已经花了很多时间尝试在dotnet sdk里面安装 docker 镜像。

基本上,整个过程都在这个 Dockerfile 中“编码”:

    FROM ubuntu:latest
    RUN apt-get update
    RUN apt-get install -y wget
    RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    RUN dpkg -i packages-microsoft-prod.deb
    RUN rm packages-microsoft-prod.deb
    RUN apt-get update
    RUN apt-get install -y apt-transport-https
    ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
    RUN apt-get install -y dotnet-sdk-6.0
    # dotnet sdk is installed!

    STOPSIGNAL SIGQUIT

我用命令运行这个 dockerfile

    docker build -t make_synchro_bot-image -f Dockerfile .

    docker run -it --name make_synchro_bot-cont -d make_synchro_bot-image

然后我在容器内连接,

    docker exec -it make_synchro_bot-cont /bin/bash

我有一个团队

dotnet --version他说...

The command could not be loaded, possibly because:
  * You intended to execute a .NET application:
      The application '--version' does not exist.
  * You intended to execute a .NET SDK command:
      No .NET SDKs were found.

Download a .NET SDK:
https://aka.ms/dotnet-download

Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found

同时dotnet,dotnet --info-work,命令dotnet --list-sdks显示已安装SDK的空列表

(见附图)

所以我的问题是,这到底是什么意思?

我按照手册做所有事情

此外,这个问题会在特定的服务器上表现出来,而且幸运的是,它会出现在生产环境中。

我将 docker 的版本更新到了最新版本,尽我所能清理了缓存,删除了不必要的图像,docker images prune-做到了,重建了……结果是一样的!

原则上,我准备扔掉这个 dzhelo 并使用现成的 docker 镜像。我只是还不明白我将面临什么困难。我需要在容器内执行命令

    dotnet publish

如果你给我关于如何做“同样的事情,但以不同的方式”的建议 - 我将不胜感激。

PS 来自领域的最新消息:我遇到了这样一个存储库,我正在坐着,正在学习......我试图了解我错在哪里。

dotnet sdk 不工作

.net ubuntu
  • 1 个回答
  • 113 Views
Martin Hope
S.H.
Asked: 2022-08-08 20:15:27 +0000 UTC

Net Core 和 MS SQL + Docker:“System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Data.SqlClient”错误来自哪里?

  • 1

各位大佬,简而言之:无法启动从docker镜像连接到MS SQL数据库的项目,出现错误

    Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly
    'Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5'. 
    The system cannot find the file specified.

    File name: 'Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5'

通过错误的措辞搜索网络会导致像这样的相当愚蠢的话题

尝试使用以前版本的 Microsoft.Data.SqlClient,甚至使用 Net Core 5.0 而不是 6.0,也都不起作用。

该怎么办?

现在详细说一下。

我正在做的是在 Net Core 上编写一个简单的控制台程序,该程序需要连接到数据库并执行查询。

对于这个问题,我做了一个单独的回购

https://github.com/junecat/SqlDemoCsharp

从字面上看,这是它的“内容”部分:

using (SqlConnection conn = new SqlConnection(sqlCnStr))
{
    conn.Open();

    using (StreamWriter w = File.AppendText(fPath))
        w.WriteLine("Conection opened!");

    const string sqlSel = "select count(*) from Table1";
    using (SqlCommand cmd = new SqlCommand(sqlSel, conn))
    {
        int rez = (int)cmd.ExecuteScalar();

        using (StreamWriter w = File.AppendText(fPath))
            w.WriteLine($"count = {rez}");
    }
}

为了创建这个项目 - 我使用最简单的命令

dotnet new console 和 dotnet add package Microsoft.Data.SqlClient

然后我在项目中添加一些代码,保存、编译、运行——一切正常!

在 Windows 下。

输出到文件

    Hello, from SQL test program...
    Conection opened!
    count = 6

现在我正在尝试在 Linux 虚拟机中构建这个项目:

    dotnet publish -c release
    cd /home/konst/SqlDemoCsharp/SqlDemoCsharp/bin/Release/net6.0/publish/
    dotnet SqlDemoCsharp.dll

一切正常,Logs/Logfile.log同样的三行可见,说明项目已经启动,连接SQL并执行查询。

现在我正在尝试在 docker 映像中做同样的事情。

实际上,整个构建和运行过程包含在两个 Dockerfile 和两个 sh 文件中:

集会:

码头文件:

    FROM ubuntu:latest
    RUN apt-get update
    RUN apt-get install -y wget
    RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    RUN dpkg -i packages-microsoft-prod.deb
    RUN rm packages-microsoft-prod.deb
    RUN apt-get update
    RUN apt-get install -y apt-transport-https
    ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
    RUN apt-get install -y dotnet-sdk-6.0
    # dotnet sdk is installed!

    COPY ./SqlDemoCsharp /App/SqlDemoCsharp
    WORKDIR /App/SqlDemoCsharp
    RUN dotnet publish -c release
    CMD mkdir /App/publish-output/
    CMD cp -r /App/SqlDemoCsharp/bin/Release/net6.0/publish/* /App/publish-output

.sh 文件:

    docker build -t build_sql_demo-image -f Dockerfile .

    docker run -it --name build_sql_demo-cont  -v ~/SqlDemoCsharp/publish-output:/App/publish-output -d build_sql_demo-image

发射:

码头文件2:

    FROM mcr.microsoft.com/dotnet/aspnet:6.0
    ENV TZ=Europe/Moscow
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    COPY publish-output/* /App/
    WORKDIR /App
    ENTRYPOINT ["dotnet", "SqlDemoCsharp.dll"]

.sh 文件:

    docker build -t run_sql_demo-image -f Dockerfile2 .

    docker run -it --name run_sql_demo-cont  -v ~/SqlDemoCsharp/Logs/:/App/Logs/  -d run_sql_demo-image

启动容器后,日志中没有写入任何内容,执行后,docker logs run_sql_demo-cont我看到一个不幸的错误:

    Unhandled exception. System.IO.FileNotFoundException: 
    Could not load file or assembly 'Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5'. 
    The system cannot find the file specified.

    File name: 'Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5'

Microsoft.Data.SqlClient而且,当然,我在组装过程中没有得到一个具有确切名称的文件,但是 Microsoft.Data.SqlClient.dll 文件已经出现了 3 次:

konst@pve:~/SqlDemoCsharp$ find . -name Microsoft.Data.SqlClient.dll
./publish-output/runtimes/win/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll
./publish-output/runtimes/unix/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll
./publish-output/Microsoft.Data.SqlClient.dll

如果您搜索运行应用程序的 Linux 虚拟机的文件系统,您可以看到相同的 DLL 位于相同的路径中:

konst@ucs117:~$ cd SqlDemoCsharp/
konst@ucs117:~/SqlDemoCsharp$ sudo find . -name Microsoft.Data.SqlClient.dll
./SqlDemoCsharp/bin/Release/net6.0/runtimes/unix/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll
./SqlDemoCsharp/bin/Release/net6.0/runtimes/win/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll
./SqlDemoCsharp/bin/Release/net6.0/publish/runtimes/unix/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll
./SqlDemoCsharp/bin/Release/net6.0/publish/runtimes/win/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll
./SqlDemoCsharp/bin/Release/net6.0/publish/Microsoft.Data.SqlClient.dll
./SqlDemoCsharp/bin/Release/net6.0/Microsoft.Data.SqlClient.dll

这里在 find 命令的输出中有 6 行而不是 3 行,但这是因为应用程序有一个单独的目录,以及一个单独的目录 Publish

另外,我已经阅读了这个“ MS 故障排除指南”,但那里的建议都没有帮助。

一般来说,大自然的奥秘。很明显,由于某种原因,docker“看不到”位于“附近”的文件(或者更确切地说,与应用程序本身的 DLL 位于同一目录中)Microsoft.Data.SqlClient.dll

c# .net
  • 1 个回答
  • 44 Views
Martin Hope
S.H.
Asked: 2022-07-27 00:08:58 +0000 UTC

Docker和git clone:使用缓存如何处理?

  • 0

敬启者,

我这样做:

我在 github 存储库中有我的简单 C#/NET Core 6.0 应用程序的源代码(我的)。

我正在编写一个 Dockerfile,它应该采用此代码并构建应用程序。

据我了解,这是一种相当普遍的做法 - 一个收集应用程序的单独容器。

这是这个dockerfile,里面没有什么特别原创的(我没有故意优化它):

    FROM ubuntu:latest
    RUN apt-get update
    RUN apt-get install -y wget
    RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    RUN dpkg -i packages-microsoft-prod.deb
    RUN rm packages-microsoft-prod.deb
    RUN apt-get update
    RUN apt-get install -y apt-transport-https
    ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
    RUN apt-get install -y dotnet-sdk-6.0
    # dotnet sdk is installed!

    RUN apt-get install -y git
    ARG ssh_prv_key
    ARG ssh_pub_key

    # Authorize SSH Host
    RUN mkdir -p /root/.ssh
    RUN chmod 0700 /root/.ssh
    RUN ssh-keyscan github.com > /root/.ssh/known_hosts

    # Add the keys and set permissions
    RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa
    RUN echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub
    RUN chmod 600 /root/.ssh/id_rsa
    RUN chmod 600 /root/.ssh/id_rsa.pub

    WORKDIR /App
    RUN git clone git@github.com:junecat/InternalProject.git
    WORKDIR /App/InternalProject
    RUN dotnet publish -c release
    CMD mkdir /App/publish-output/
    WORKDIR /App/publish-output
    CMD cp -r /App/InternalProject/bin/Release/net6.0/* /App/publish-output

从这个 dockerfile,我构建了我需要使用命令构建扩展的容器映像

    docker build -t internal_project_build-image --build-arg ssh_prv_key="$(cat ~/.ssh/ro1_key)" --build-arg ssh_pub_key="$(cat ~/.ssh/ro1_key.pub)" -f Dockerfile .

如您所见,在这个阶段,我的readonly-keys 用于访问github从主机到容器。

然后我用命令启动容器

    docker run -it --name internal_project_build-cont  -v /home/konst/BuildingContainer/publish-output:/App/publish-output -d internal_project_build-image

我的 Dockerfile 已经为我工作了,所以我感觉自己就像世界的统治者。一切都很棒。

直到我对源代码做了一些小的改动,然后我尝试重新构建应用程序。

该应用程序是从旧的源代码构建的。我通过它给出的错误看到了它。我的“小改动”旨在纠正这些错误。

然后我注意到在构建容器映像以响应命令时

    RUN git clone git@github.com:junecat/InternalProject.git

我在命令控制台中看到一条docker build消息

    Step 22/24 : RUN git clone git@github.com:junecat/InternalProject.git
     ---> Using cache
     ---> 3c5778dd3426

“呃!——彼得·伊万诺维奇和我说”

似乎出于某种我不知道的原因,一个聪明的 docker 没有去 github 寻找新的资源,而是决定“它会做!”

我怎样才能让他摆脱困境?

顺便说一句,通过表面的搜索,我发现我并不是唯一一个受苦的人。但是该问题中没有给出任何方法-在我看来,答案很合适...

另外,谢谢你给我关于如何优化我正在做的过程的建议(在容器中构建应用程序)

非常感谢您的建议!

小加法

首先,非常感谢 tym32167 在 git clone 之后使用 git pull 的建议。它有所帮助,但正如评论中所预测的那样,只有一次。然后,显然,“一切都被缓存了”。当然,我会再次尝试检查,也许是我不注意,但似乎这仍然不能解决问题。

到目前为止,对我来说,问题是通过使用命令“解决”的docker builder prune。但是我把“决定”这个词放在引号中是有原因的:这个命令会重置构建器的整个缓存。也就是说,下一次是一切,一切都将再次下载。实际上,这类似于您不喜欢草叶上的特定瓢虫 - 您需要用凝固汽油弹烧掉整个草地并再次生长。

c# docker
  • 1 个回答
  • 76 Views
Martin Hope
S.H.
Asked: 2022-07-26 02:55:47 +0000 UTC

Tarjan 的拓扑排序算法:什么样的重复性?

  • 2

我正在研究不同的算法,包括 - 关于拓扑排序有一个美丽的问题:

给定一个有向图,即一组由箭头连接的顶点。是否可以对顶点进行编号,使任何箭头从数字较小的数字指向数字较大的数字?

例子:

带编号的图表

很明显,这必须是一个没有循环的图。

而且我很容易在谷歌上搜索到这种拓扑排序搜索算法被称为“Tarjan 算法”

然后魔法开始了。

在很多 地方,Tarjan 的算法,甚至它解决的问题,表述方式都大相径庭:“Tarjan's algorithm for offline LCA (least common nucleus, LCA) search”

我知道,显然,从问题的一种表述到另一种表述之间存在某种美妙的过渡,但我找不到它是一种什么样的过渡?Tarjan 算法是否有专门针对拓扑排序的解释?

在评论中,有人告诉我,Tarjan 可能有两种完全不同的“名义”算法,它们在含义上并不相关。是这样吗?

添加:

我找到了一篇相对容易理解的文章(Stanislav Volodarsky 在评论中向我指出)

然后我用 VSC 重写了这个程序,链接在文章的底部。

同时,我取了“算法操作示例”文章中给出的图形,将顶点名称中的字母替换为1到5的数字。我在那里输入了8条边。

该程序的工作结果是矛盾的:它发出了0 1 3 5 4 2. 现在,注意,问题是:它是什么?

程序:

    #include <iostream>
    #include <vector>
    #include <conio.h>

    using namespace std;

    int n=5; // число вершин
    vector<int> g[8]; // граф
    bool used[8];
    vector<int> ans;
     
    void dfs (int v) {
        used[v] = true;
        for (size_t i=0; i<g[v].size(); ++i) {
            int to = g[v][i];
            if (!used[to])
                dfs (to);
        }
        ans.push_back (v);
    }
     
    void topological_sort() {
        for (int i=0; i<n; ++i)
            used[i] = false;
        ans.clear();
        for (int i=0; i<n; ++i)
            if (!used[i])
                dfs (i);
        reverse (ans.begin(), ans.end());
    }

    int main(){
        g[0] = {1, 2};
        g[1] = {1, 3};
        g[2] = {1, 4};
        g[3] = {1, 5};
        g[4] = {2, 4};
        g[5] = {3, 4};
        g[6] = {3, 5};
        g[7] = {4, 5};
        topological_sort();
        for( size_t i=0; i<ans.size(); ++i )
            cout << ans[i] << " ";
        getch();
    }

结果图片:

矛盾的结果

拓扑排序

алгоритм математика
  • 1 个回答
  • 65 Views
Martin Hope
S.H.
Asked: 2022-07-09 16:22:50 +0000 UTC

面向程序员的 Python

  • 2

问题如下。

我决定学一点 Python。不幸的是,我对他的了解相当平庸,在他写东西的时候,我一直在谷歌上搜索。

但对我来说,python 远非第一种编程语言。也就是说,我已经用 C# 和 C++ 写了几年(委婉地说),接触过 PHP(然后我用肥皂洗手!),名义上我用 JS 写(虽然我非常讨厌它)我的心)并且我对语言中发生的“幕后”有一个想法:各种智能指针如何在那里工作,等于,为什么以及何时需要结构而不是对象等。诚然,我没有使用纯函数式语言的经验,但其中的概念看起来有点熟悉。

而且我想缩短路径:拿一本书,上面写着“哦,内存管理在python中以这种方式和那种方式工作。但是在这种情况下,正常的尾递归优化已经完成,所以不用担心,编写递归调用和就是这样,它会很好。但这里的语法是这样那样的,因为和因为那个“

但是,如果我在 courser 上参加“初学者”课程,他们会教我再次在那里添加线条。(不解释,顺便说一下,python 字符串 macabl 或 imtabl)。

如果我在搜索引擎中输入查询“程序员的 Python”,“为初学者、傻瓜和那些想要每月赚取数十万美元的人提供的 Python 课程”会涌向我。那里的信息对我来说是新的,一般来说为零。

你能帮我找到一个合适的来源,跳过所有这些外壳并立即写下语言的概念:内存管理如何在那里工作、对象、模块绑定等?总的来说,这样我就可以利用我的知识,从事“从其他语言开始”的学习?

谢谢你。

c# python
  • 1 个回答
  • 91 Views
Martin Hope
S.H.
Asked: 2022-06-27 01:48:08 +0000 UTC

ASP.NET Core MVC:提交表单时是否可以遍历表单字段?

  • 0

ASP.NET Core MVC:提交表单时是否可以遍历表单字段?

我阅读了有关如何在 NET Core MVC 项目中绑定表单字段并调用控制器参数的部分 https://metanit.com/sharp/aspnet5/7.8.php

该方案非常严格:您有一个包含两个字段的表单 - 它将由一个控制器方法处理,该控制器方法恰好采用两个参数。

例如,这个视图

    @{
     ViewData["Title"] = "Login";
    }
    <form method="post">
        <label>Логин:</label><br />
        <input type="text" name="login" /><br /><br />
        <label>Пароль:</label><br />
        <input type="text" name="password" /><br /><br />
        <input type="submit" value="Отправить" />
    </form>

对应于以下控制器方法:

    [HttpPost]
    public IActionResult Login(string login, string password)
    {
        string authData = $"Login: {login}   Password: {password}";
        return Content(authData);
    }

添加字段?方法中应该还有一个参数!

一般来说,这是可以理解的,而且在最明显的情况下,它会让生活更轻松。

我的印象是,在这样的项目中,我无法在控制器中编写一个方法来“捕获”来自任意表单的 POST,然后可以遍历其字段。这种事情很少见,但确实会发生。

肤浅的谷歌搜索也没有产生任何结果。

当然,你可以用javascript将所有表单字段的所有值收集到一个隐藏字段中,然后单独提交这个字段,但不知何故……过度工程。

请告诉我,如何编写和处理具有任意数量字段的表单,以便在控制器中您可以简单地迭代它们?

谢谢!

.net asp.net-mvc
  • 1 个回答
  • 21 Views
Martin Hope
S.H.
Asked: 2022-06-11 21:41:44 +0000 UTC

HTML & CSS:为什么你必须将图像缩小 20 像素以便没有滚动条?

  • 2

亲爱的鉴赏家,

我挣扎了几个小时,迭代了正文、页面等的所有属性,但我无法弄清楚。

我以编程方式生成一张完全适合屏幕尺寸的图片。

我在浏览器中显示它,全屏打开(粗略地说,按 F11)。

但!而我是人造的!生成图像时,我不会将其减少 20 像素(宽度和高度) - 它在页面两侧(右侧和底部)显示滚动条。

我怀疑我没有为某些容器明确写过类似“margn: 0; padding: 0”的东西。

这是html:

    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body scroll="no" style="body-style">

    <!-- The video -->
    <video autoplay muted loop id="myVideo">
      <source src="Videos/Sparks-smallsize.mp4" type="video/mp4">
    </video>

    <div class="pngcontainer">
        <img src="images/image1.png">
    </div>

    <div class="logo-bottom">
      <img src="images/logo-small.png">
    </div>

    </body>

这是CSS:

#myVideo {
  position: fixed;
  right: 0;
  bottom: 0;
  min-width: 100%;
  min-height: 100%;
}

.body-style {
    position: relative;
    overflow: hidden;
    margin: 0;
    border: 0;
    padding: 0;
}

.logo-bottom {
  position: fixed;
  bottom: 0;
  width: 215px;
  background: rgba(0, 0, 0, 0.5);
  color: #f1f1f1;
  padding: 15px;
}

.pngcontainer {
  position: relative;
  z-index: 101;
  top:0;
  left:0;
    margin: 0;
    border: 0;
    padding: 0;
}

这是它在屏幕上的外观 - 请参阅滚动条:

带滚动条

这是存储库中文件夹的链接。有一张 2541 x 1421 大小的图片,如果你把它做成 2540 x 1420 大小,滚动条就会消失。屏幕尺寸为 2560 x 1440。

一个小的更正:我做了一个页面,你可以在浏览器中打开并查看它,只是它是为我的显示器分辨率设计的,请考虑这一点。

感谢您的提示!

html
  • 1 个回答
  • 10 Views
Martin Hope
S.H.
Asked: 2022-09-05 18:42:18 +0000 UTC

nginx:如何使用 proxy_pass 转发 80 和 443 端口?

  • 1

到目前为止,我以一种相当简单的方式使用了 nginx:http/https 调用“登陆”它,它作为 certbot 运行和更新letsencrypt的“基础”——不同域的证书。通常,静态站点使用nginx托管在服务器本身上,对于那些提供api的站点,在nginx通过http之后工作,即nginx作为ssl-termination工作。也就是说,“从互联网我们通过https访问,在网络内部我们使用http”——每个人都很高兴。

但有那么一刻,我“想要一些奇怪的东西”。即 gitlab 出现在网络内部。

Gitlab 是一个非常独立的东西,它托管https 证书。也就是说,如果我现在有来自外部的 gitlab 名称呼叫 - 那么我需要 https - 请求将在网络内部转发。

同时我可以在gitlab上自己配置http/https端口,不过现在设置为8080和8443。

我阅读了有关 proxy_ssl_server_name 指令的各种提示,但似乎没有一个适合我。在 nginx 级别使用 ssl-termination 的旧方法也不适合我。

典型的 proxy_pass 文件如下所示:

    server {

        root /var/www/<folder_of_site>;

        index index.html index.htm index.nginx-debian.html;

        server_name mygitlab.myserver.ru www.mygitlab.myserver.ru;
        client_max_body_size 2048m;

        location / {
              proxy_redirect          http://192.168.0.10:8080 /; 
              proxy_pass_header       Server;
              proxy_set_header        X-Real-IP $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header        X-Scheme $scheme;
              proxy_set_header        Host $http_host;
              proxy_set_header        X-NginX-Proxy true;
              proxy_connect_timeout   5;
              proxy_read_timeout      240;
              proxy_intercept_errors  on;

              proxy_pass              http://192.168.0.10:8080;
        }
    }

请注意:连接从第 80 个端口传输的任何地方都没有写,显然这是默认行为。现在,如果我location可以在指令中指定端口——我只需将包含指令的文件重复两次proхy_...——显然我会得到想要的结果。

我将用这张图片来说明 nginx 的期望行为:

nginx 和 gitlab

我将非常感谢您的建议!

结果是什么

亲爱的先生们,这个项目是在一切顺利后添加的。我听从了Pak Uula的建议,并在他的回答中做了他所谓的“正确”:现在我让 nginx 进行 ssl 终止,而 Gitlab“正常工作”。事实证明,在 gitlab 中禁用 https 不需要额外的努力,手册上说“默认情况下,Omnibus GitLab 不使用 HTTPS”。

因此,一切都对我有用。对于那些将阅读这篇文章的人,我会再写一点:

第 0 步:在带有地址的打字机上的 DMZ 中192.168.0.10,我使用如下命令在容器中启动 gitlab

sudo docker run --detach \
  --hostname docker.junecat.ru \
  --publish 8443:443 --publish 8080:80 --publish 1022:22 \
  --name gitlab1 \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ce:latest

第一步:我为 nginx 创建一个文件,/etc/nginx/sites-available/docker.junecat.ru内容如下:

server {

  listen 80;
  listen [::]:80;

  root /var/www/docker.junecat.ru/;

  index index.html index.htm;

  server_name docker.junecat.ru www.docker.junecat.ru;

  location / {
          proxy_redirect          http://192.168.0.10:8080/  /;
          proxy_pass_header       Server;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Scheme $scheme;
          proxy_set_header        X-NginX-Proxy true;
          proxy_connect_timeout   5;
          proxy_read_timeout      240;
          proxy_intercept_errors  on;

          proxy_pass              http://192.168.0.10:8080/;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
  }
}

注意命令

    sudo ln -s /etc/nginx/sites-available/docker.junecat.ru /etc/nginx/sites-enabled/

早已经完成了,而且该站点不仅处于“可用”状态,而且处于“允许”状态。

如您所见,还没有https证书。他们将出现在

第二步:告诉 sertbot 获取证书并根据它们修复 nginx 文件:

    sudo certbot --nginx -d docker.junecat.ru -d www.docker.junecat.ru

好吧,总而言之 - 现在一切如何运作的正确图片(以免误导任何人):

它是如何工作的

linux
  • 1 个回答
  • 10 Views
Martin Hope
S.H.
Asked: 2022-08-22 21:39:48 +0000 UTC

以编程方式在全屏中打开 chrome

  • 2

我想向用户展示一个全屏“演示文稿”(这是一个本地 HTML 文件),假设他们的主要浏览器是 Chrome。

实际上这个问题 - 几乎完全符合标题,除了一个条件:如果浏览器已经在运行,我想在其中打开一个新选项卡并以某种方式将其转移到全屏。

通常我想做的是这样做:

第一种方式。男人用手按键盘上的 F11。由于显而易见的原因,这种方法不适合我。

第二种方式 -此问题答案中的建议有效,前提是计算机上没有运行 chrome。也就是说,一个新的浏览器实例将在全屏中打开。如果浏览器已经在运行 - 你会得到 zilch。也就是说,没有过渡到全屏。它只会打开另一个选项卡。

通常,在讨论的这一点上,建议有两种方式:

  1. 杀死所有浏览器实例,并以全屏模式重新启动一个窗口。有两件事会干扰这一点:

    首先,用户可能在选项卡中打开了一些重要的东西。关闭它们有点麻烦。

    其次,Chrome 可以首先开始选择需要工作的配置文件。也就是说,人们会看到这样的东西,而不是漂亮的演示文稿:

    铬

    一般来说,“先杀死,然后重新创建”的方式非常糟糕。

  2. “胡说八道!” - 说知道如何使用 SendMessage 向窗口发送消息的人 - “只需找到所需窗口的 ID,然后发送它F11!”。

    简单……但不是很简单。

    在这里,我坐在电脑前。我在 chrome 中打开了几个选项卡,chrome 进程本身在大约 25 个实例中运行。这不是我的恶意 - Chrome 本身就是这样做的。

    如果我想向新打开的 chrome 发送“按键”-我需要“启动它,然后向它询问 MainWindowHandle”。

    通常这个建议后面会跟着一个这样的代码示例

     Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
     if (p != null)
     {
         IntPtr h = p.MainWindowHandle;
         SetForegroundWindow(h);
         SendKeys.SendWait("k");
     }
    

    并始终以记事本为例。

    它适用于笔记本电脑。

    使用 Chrome - 总是作为调用的结果p.MainWindowHandle,出现异常“进程已退出,因此请求的信息不可用。”。

    如果您想检查这一点,请尝试在按钮单击上放置类似的内容:

    (我建议您在 WinForms 中运行它 - 为 .NET Framework 4.8 构建的应用程序 - 为什么在 NET Core 中调用 Process.Start (),使用不是可执行名称的参数调用,会立即导致异常)

         string index = Path.Combine(@"C:\Temp", "index.html");
         Process bProc = Process.Start(index);
    
         // pause 0.2 sec
         Thread.Sleep(2000);
    
         // send key F11 to process
         if (bProc != null) {
    
             try {
                 while (bProc.MainWindowHandle == IntPtr.Zero) {
                     Thread.Sleep(10);
                     bProc.Refresh();
                 }
    
                 var handle = bProc.MainWindowHandle;
                 // удача! Есть искомый hadle!
                 // собственно, посылка F11 по известному handle
                 SetForegroundWindow(h);
                 SendKeys.SendWait("k");
             }
             catch (Exception ex) {
                 MessageBox.Show(ex.Message);
                 // The process has probably exited,
                 // so accessing MainWindowHandle threw an exception
             }
         }
    

    并且удача在这个代码片段中永远不会发生。

一般来说,任务不是很简单。而且我已经尝试了所有或多或少浮在表面上的方法。

你能告诉我怎么做吗?

c#
  • 1 个回答
  • 10 Views
Martin Hope
S.H.
Asked: 2022-07-25 03:05:05 +0000 UTC

Docker和docker-compose:容器的生命周期

  • 1

我有一个关于多个容器相互交互的系统架构的问题。

让我docker-compose.yml描述一下容器系统。

但它们的“存在时间”不同:

在这些容器中,有一些“长期存在的”容器——例如,一个数据库,该容器一直在运行。并且被其他几个容器使用。

或者 nginx,它充当“从外部到内部资源”连接的代理。

还有一些短命的,根据“起床,到外部站点,将结果写入数据库并死掉”的原则来解决一个特定问题。

所有这些都在一个 docker compose 中进行了描述,并且在一个networks.

这就是问题所在:我解除了所有这些结构,一个为我工作的短命容器(完成了它的工作而死了)。

在我做这样的事情之前docker-compose stop,我的“长寿”容器一直在运行。

它适合我!

但有时,我需要再次运行我的“短命”容器——例如,通过 cron。

你会怎么做?也就是说,如何启动一个容器,使其在启动时最终位于同一个网络中,并且可以与其他“长寿命”容器交互?

因为每次停止和启动所有这些巴拉莱卡琴都比“踢”一个特定的容器要长得多。

我想到制作另一个docker-compose.yml,其中只描述了这个“短期”容器中的一个,并且是同一个networks,但它不起作用,因为我的“短期”容器依赖于“长期”住”一个,它已经在运行。

我将不胜感激!

docker
  • 1 个回答
  • 10 Views
Martin Hope
S.H.
Asked: 2022-07-14 18:01:35 +0000 UTC

JetBrainsRider:如何更改打开选项卡的选择?

  • 0

我刚开始使用 JetBrains Rider(尽管在使用 VS 和 Resharper 多年之后)。

我对界面的变化感到非常恼火。从最简单的开始:我打开了几个标签。

我现在在哪一个?

在 VS 中,我将整个选项卡标题设为倒色。在 Rider - 我有许多铭文(顺便说一句,不是那么小的铭文!)有一个很小而苍白的下划线,它突出了其他人想要的标签。嗯,老实说,很难习惯。

再一次,这是图片,它有两个红色矩形。在顶部 - 它如何突出显示在那里打开的骑手。底部是 VS 是如何做到的。

VS vs JetBrains Rider

现在的问题是:是否有可能以某种方式使 Rider 中的选项卡选择与 VS 中相同?突出显示整个标签标题?

提前致谢!

visual-studio
  • 1 个回答
  • 10 Views
Martin Hope
S.H.
Asked: 2022-05-18 06:15:25 +0000 UTC

docker:将容器中的时间与主机同步

  • 0

我有许多在 docker 容器中运行的进程。

但是日志中的时间与主机上的时间完全不同。

按照docker 论坛中的建议,我尝试通过将docker run参数添加到命令来重新创建容器-v /etc/timezone:/etc/timezone:ro

但是,不幸的是,这并没有导致结果:

在此容器中执行时docker exec -it,date 命令再次输出与主机时间不匹配的时间。尽管cat /etc/timezone容器中的输出Europe/Moscow与主机上的时区 ( ) 相同。

你能告诉我要找到解决问题的方法吗?

(理论上,我可以在每个容器中包含某种方式来强制启动时间,首先从外部源接收它,但在我看来这是一种非常复杂的方式。)

谢谢你。

linux
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5