nerdctl icon indicating copy to clipboard operation
nerdctl copied to clipboard

Windows %PATH% shows as linux path, not windows path?

Open brwilkinson opened this issue 2 years ago • 5 comments

Description

I am wondering what is the source of this difference below?

I see a related discussion:

  • https://github.com/containerd/nerdctl/discussions/2285
containerd --version
containerd github.com/containerd/containerd v1.7.5 fe457eb99ac0e27b3ce638175ef8e68a7d2bc373
nerdctl version
time="2023-09-09T13:18:19-07:00" level=warning msg="unable to determine buildctl version: exec: \"buildctl\": executable file not found in %PATH%"
time="2023-09-09T13:18:19-07:00" level=warning msg="unable to determine runc version: exec: \"runc\": executable file not found in %PATH%"
Client:
 Version:       v1.5.0
 OS/Arch:       windows/amd64
 Git commit:    b33a58f288bc42351404a016e694190b897cd252
 buildctl:
  Version:

Server:
 containerd:
  Version:      v1.7.5
  GitCommit:    fe457eb99ac0e27b3ce638175ef8e68a7d2bc373
 runc:
  Version:
cni version 0.3.0

Steps to reproduce the issue

nerdctl run --rm mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022 cmd /c "echo %path%"
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
docker run --rm mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022 cmd /c "echo %path%"
> C:\Windows\system32;C:\Windows;;C:\Program Files\PowerShell;

Describe the results you received and expected

Docker shows the correct windows path, however nerdctl shows the linux path ?

What version of nerdctl are you using?

Version: v1.7.5

Are you using a variant of nerdctl? (e.g., Rancher Desktop)

None

Host information

nerdctl info Client: Namespace: default Debug Mode: false

Server: Server Version: v1.7.5 Storage Driver: windows Logging Driver: json-file Cgroup Driver: Cgroup Version: Plugins: Log: fluentd journald json-file syslog Storage: windows-lcow windows Security Options: Kernel Version: Operating System: OSType: windows Architecture: CPUs: 0 Total Memory: 0B Name: BRW-SB3 ID: fe8b756d-59de-46e4-bdc6-e56d63c158c5

brwilkinson avatar Sep 09 '23 20:09 brwilkinson

not sure if this is helpful, however ...

docker inspect 570f5c4f678f
[
    {
        "Id": "sha256:570f5c4f678f5dfb03807894dcc696382a5ac9db713705bb436c903b8574601a",
        "RepoTags": [
            "mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022"
        ],
        "RepoDigests": [
            "mcr.microsoft.com/powershell@sha256:5e0222bb80f4cc5b63fc0eb51ca16001a141575d7b2253e32ed5ffb029c536d3"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-07-13T18:32:08.5185745Z",
        "Container": "ce5af146daa5d4e567070277fee5a74b5e17e9025b144b5e268e72a9449f0117",
        "ContainerConfig": {
            "Hostname": "ce5af146daa5",
            "Domainname": "",
            "User": "ContainerUser",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "ProgramFiles=C:\\Program Files",
                "PSModuleAnalysisCachePath=C:\\Users\\Public\\AppData\\Local\\Microsoft\\Windows\\PowerShell\\docker\\ModuleAnalysisCache",
                "PSCORE=\\PowerShell\\pwsh.exe",
                "WindowsPATH=C:\\Windows\\system32;C:\\Windows",
                "POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-NanoServer-ltsc2022",
                "POWERSHELL_TELEMETRY_OPTOUT=0"
            ],
            "Cmd": [
                "cmd",
                "/S",
                "/C",
                "#(nop) ",
                "CMD [\"pwsh.exe\"]"
            ],
            "Image": "sha256:2f9ca742140ef8085256cda281477c61dfdc7ac0982ea7639ed5dd19795214b4",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.15+azure",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "ContainerUser",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "ProgramFiles=C:\\Program Files",
                "PSModuleAnalysisCachePath=C:\\Users\\Public\\AppData\\Local\\Microsoft\\Windows\\PowerShell\\docker\\ModuleAnalysisCache",
                "PSCORE=\\PowerShell\\pwsh.exe",
                "WindowsPATH=C:\\Windows\\system32;C:\\Windows",
                "POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-NanoServer-ltsc2022",
                "POWERSHELL_TELEMETRY_OPTOUT=0"
            ],
            "Cmd": [
                "pwsh.exe"
            ],
            "Image": "sha256:2f9ca742140ef8085256cda281477c61dfdc7ac0982ea7639ed5dd19795214b4",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "windows",
        "OsVersion": "10.0.20348.1850",
        "Size": 561631538,
        "VirtualSize": 561631538,
        "GraphDriver": {
            "Data": {
                "dir": "C:\\ProgramData\\Docker\\windowsfilter\\89d9b262e9234514035e027490e48fffda67baad9138f86fe894890c2d804ab4"
            },
            "Name": "windowsfilter"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:765c01b50936296499b458db80437b4f0c7d0216038c7d759d8741e7b509817a",
                "sha256:fa9662a9b6052f44b955a33fc3b88f98eed57c5a32f2326aea76e31e0c1b8a00",
                "sha256:17fecc8860e0ad25fc46408dd70f83e7cd9ac2d2b38067e1218115e90ce92d84",
                "sha256:146c63fb0f78c24787c2c43d00d031b54ed8c1b4196a409ccc7d5fd8c3431dc4",
                "sha256:97e9e225a31aff1afa9b184d8314859f0d008994d0978de385add7ce7a6e43cb",
                "sha256:b228a9de938a0c9026a7a19782c006062784754133c30a4edbedd25199a6362c",
                "sha256:f1909cad41aea8bf0571b57aa08f54e8e32fba1b36bdf9f67cacf1c260140636",
                "sha256:3bc4e6efd83306e643f92187c511bbb63b0de391c24b3dd65312d12291cc7bbe",
                "sha256:459d86538d500e284cf08721906c175dd59e63169c2c09afd1a191d59db7d6a5"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

brwilkinson avatar Sep 09 '23 20:09 brwilkinson

nerdctl inspect 5e0222bb80f4
[
    {
        "Id": "sha256:570f5c4f678f5dfb03807894dcc696382a5ac9db713705bb436c903b8574601a",
        "RepoTags": [
            "mcr.microsoft.com/powershell:lts-nanoserver-ltsc2022"
        ],
        "RepoDigests": [
            "mcr.microsoft.com/powershell@sha256:5e0222bb80f4cc5b63fc0eb51ca16001a141575d7b2253e32ed5ffb029c536d3"
        ],
        "Comment": "",
        "Created": "2023-07-13T18:32:08.5185745Z",
        "Author": "",
        "Config": {
            "User": "ContainerUser",
            "AttachStdin": false,
            "Env": [
                "ProgramFiles=C:\\Program Files",
                "PSModuleAnalysisCachePath=C:\\Users\\Public\\AppData\\Local\\Microsoft\\Windows\\PowerShell\\docker\\ModuleAnalysisCache",
                "PSCORE=\\PowerShell\\pwsh.exe",
                "WindowsPATH=C:\\Windows\\system32;C:\\Windows",
                "POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-NanoServer-ltsc2022",
                "POWERSHELL_TELEMETRY_OPTOUT=0"
            ],
            "Cmd": [
                "pwsh.exe"
            ]
        },
        "Architecture": "amd64",
        "Os": "windows",
        "Size": 1186816416,
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:765c01b50936296499b458db80437b4f0c7d0216038c7d759d8741e7b509817a",
                "sha256:fa9662a9b6052f44b955a33fc3b88f98eed57c5a32f2326aea76e31e0c1b8a00",
                "sha256:17fecc8860e0ad25fc46408dd70f83e7cd9ac2d2b38067e1218115e90ce92d84",
                "sha256:146c63fb0f78c24787c2c43d00d031b54ed8c1b4196a409ccc7d5fd8c3431dc4",
                "sha256:97e9e225a31aff1afa9b184d8314859f0d008994d0978de385add7ce7a6e43cb",
                "sha256:b228a9de938a0c9026a7a19782c006062784754133c30a4edbedd25199a6362c",
                "sha256:f1909cad41aea8bf0571b57aa08f54e8e32fba1b36bdf9f67cacf1c260140636",
                "sha256:3bc4e6efd83306e643f92187c511bbb63b0de391c24b3dd65312d12291cc7bbe",
                "sha256:459d86538d500e284cf08721906c175dd59e63169c2c09afd1a191d59db7d6a5"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

brwilkinson avatar Sep 09 '23 20:09 brwilkinson

This bug is caused by a containerd bug here which only has default for unix env:

func WithDefaultPathEnv(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
        s.Process.Env = replaceOrAppendEnvValues(s.Process.Env, defaultUnixEnv)
	return nil
}

We are using the function here to set environment variables and end up overwriting the default windows path. I believe Windows Containers have a default path already configured at bootup so solution here might be to have WithDefaultPathEnv function do nothing for Windows?

iankingori avatar Sep 11 '23 10:09 iankingori

Containerd issue resolved by this PR: https://github.com/containerd/containerd/pull/9118.

cc @iankingori @brwilkinson

CharityKathure avatar Oct 11 '23 18:10 CharityKathure

The fix for this was backported into Containerd 1.7.11 and 1.6.26. I've confirmed the bug no longer repros on the latest release of nerdctl

iankingori avatar Feb 05 '24 19:02 iankingori