我构建了一个Docker镜像。我想看看Docker容器中的内容。所以我尝试将以下命令运行到powershell中:
docker exec -ti c4609ec41e73 powershell
推出了PowerShell,但我无法做任何事情。我所看到的只是
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
如何将此PowerShell启动到正在运行的容器中,我可以检查确切安装的是什么?
非常感谢一些帮助。
FROM jetbrains/teamcity-agent:latest-windowsservercore AS tools
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
FROM microsoft/dotnet-framework-build:4.7.1-windowsservercore-ltsc2016
ENV CONFIG_FILE="C:/BuildAgent/conf/buildAgent.properties" \
JRE_HOME="C:\Program Files\Java\Oracle\jre" \
NUGET_XMLDOC_MODE=skip \
DOTNET_CLI_TELEMETRY_OPTOUT=true \
DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
EXPOSE 9090
VOLUME C:/BuildAgent/conf
COPY --from=tools /BuildAgent /BuildAgent
COPY --from=tools ["C:/Program Files/Git", "C:/Program Files/Git"]
COPY --from=tools ["C:/Program Files/Mercurial", "C:/Program Files/Mercurial"]
COPY --from=tools ["C:/Program Files/Java/Oracle", "C:/Program Files/Java/Oracle"]
COPY --from=tools ["C:/Program Files/Java/OpenJDK", "C:/Program Files/Java/OpenJDK"]
#COPY ["/MSBuild/12.0", "C:/Program Files (x86)/MSBuild/12.0"]
#COPY ["/MSBuild/14.0", "C:/Program Files (x86)/MSBuild/14.0"]
COPY --from=tools ["C:/Program Files (x86)/Microsoft Visual Studio", "C:/Program Files (x86)/Microsoft Visual Studio"]
# Install Nod
#RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest https://nodejs.org/dist/v8.10.0/node-v8.10.0-x64.msi -OutFile nodejs.msi; \
# Start-Process msiexec -Wait -ArgumentList /q, /i, nodejs.msi; \
# Remove-Item -Force nodejs.msi
CMD ./BuildAgent/run-agent.ps1
答案 0 :(得分:0)
检查您自己的Windows系统是否包含此文件夹 VisualStudio \ v15.0 \ folders 因为你的dockerfile
COPY --from=tools ["C:/Program Files (x86)/Microsoft Visual Studio", "C:/Program Files (x86)/Microsoft Visual Studio"]
我认为这个copys的工作就像从你的系统复制 C:/ Program Files(x86)/ Microsoft Visual Studio 到你的图像。
我认为你的操作系统是windows。 我不确定您的docker镜像是否也是基于Windows的图像,因为大多数容器都基于ubuntu。
假设您的容器基于ubuntu,您应该首先运行容器,如
docker run -it --rm your_image
你刚从image your_image创建了一个容器。每个容器都有一个唯一的container_ID。
-it: interactive terminal
--rm: remove the container when you get out of it
当你运行图像并进入容器时,这意味着你在ubuntu系统中(在容器中),它看起来应该是
root@2be3d9fd944:_
然后你可以输入
apt list --installed
查看您在ubuntu系统下安装的内容,这一切都发生在容器中。
假设您正在使用Windows操作系统并且还有一个基于Windows的docker镜像(这里有一些official windows image base),但运行docker image始终是相同的。
docker run -it [other_options] IMAGE_ID
并且你在容器中,做你熟悉的windows shell。
如果您不使用选项-it(交互式终端),您可以像在问题中那样做。 您可以在正在运行的容器中运行命令,如下所示
docker run [other_options] IMAGE_ID
现在你从IMAGE_ID创建了一个容器,你得到一个container_ID,你可以做到
docker ps
查看容器信息,然后执行
docker exec -it [other_OPTIONS] CONTAINER_ID COMMAND [ARG...]
运行-it选项。
请阅读更多Official docker documentation,让自己更加清楚Docker的作用,这样可以节省您的实际时间。