无法在Windows Docker Container中运行cygwin

mum*_*ord 12 windows shell cygwin docker

我一直在使用Docker for Windows,尝试创建一个可以在容器内运行cygwin作为shell的Windows容器.我还没有运气好.这是我一直在搞乱的Dockerfile.

# escape=`
FROM microsoft/windowsservercore

SHELL ["powershell", "-command"]

RUN Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression
RUN choco install cygwin -y
RUN refreshenv
RUN [Environment]::SetEnvironmentVariable('Path', $env:Path + ';C:\tools\cygwin\bin', [EnvironmentVariableTarget]::Machine)
Run Code Online (Sandbox Code Playgroud)

我已经尝试设置ENTRYPOINT和CMD试图进入cygwin,但似乎都没有做任何事情.我还附加了容器docker run -it并启动了cygwin命令进入shell,但它似乎没有做任何事情.我没有收到错误,它只是返回到命令提示符,好像什么也没发生.

是否可以在Windows容器中运行另一个shell,或者我只是做错了什么?

谢谢!

Von*_*onC 3

您不使用“附加”到容器docker run:您用它启动一个容器。

对于您的情况,如此处所示docker run -it这是正确的方法。

您可以尝试使用作为切入点c:\cygwin\bin\bash,如本期所示。

正如问题 32330中评论的那样:

不要误会我的意思,cygwin 应该在 Docker Windows 容器中工作。

但是,也有点自相矛盾的是,容器被煞费苦心地融入到 Windows 中,以 Linux 上的容器为模型,只是为了让人们想要在这些新创建的 Docker Windows 容器中运行 Linux-utils……

同样的问题仍未解决,2018 年 5 月和 6 月出现了新案例:

我们有一个使用 Visual Studio 进行编译的环境,但我们仍然想使用 git 和一些来自 Linux 的非常有用的命令。
我们还使用使用Linux命令(例如curl、grep等)的of-the-shelve实用程序(例如git-repo)

有些构建需要 Cygwin,例如 ICU(一个基于 Unicode 的跨平台全球化库),最糟糕的是:我们的构建需要从源代码构建它。


您可以在MSYS2-packages issues 1239中看到崩溃的示例:

Step 5/5 : RUN "C:\\msys64\\usr\\bin\\ls.exe"
 ---> Running in 5d7867a1f8da
The command 'cmd /S /C "C:\\msys64\\usr\\bin\\ls.exe"' returned a non-zero code: 3221225794
Run Code Online (Sandbox Code Playgroud)

这可以获取有关崩溃的更多信息:

PS C:\msys64\usr\bin> 
  Get-EventLog -Index 28,29,30 -LogName "Application" | Format-List -Property *
Run Code Online (Sandbox Code Playgroud)

解决方法是:

PS > xcopy /S C:\Git C:\Git_Copy
PS > C:\Git_Copy\usr\bin\sh.exe --version > v.txt
PS > type v.txt
Run Code Online (Sandbox Code Playgroud)

正如该线程中提到的,输出在容器中的某个地方丢失,从而将其发送到文本文件。