我正在尝试将一个非常简单的控制台应用程序作为 Windows docker 容器运行。我有一个使用“dotnet-framework:4.7.2-runtime-windowsservercore-1803”基础映像的 docker 文件,如下所示。
FROM microsoft/dotnet-framework:4.7.2-runtime-windowsservercore-1803
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT "DockerConsoleApp.exe"
Run Code Online (Sandbox Code Playgroud)
控制台应用程序每 5 秒将“Hello World”输出到日志文件中”
static void Main(string[] args)
{
while (true)
{
try
{
Thread.Sleep(5000);
_logger.Info("Hello Wolrd");
}
catch (Exception e)
{
//handle the exception
Console.Error.WriteLine(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下 docker compose 文件
version: '3.4'
services:
dockerconsoleapp:
image: dockerconsoleapp:dev
build:
context: .\
args:
source: obj\Docker\publish
volumes:
- C:\Users\user\source\repos\DockerConsoleApp\DockerConsoleApp:C:\app
- C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Remote Debugger:C:\remote_debugger:ro
- C:\Users\user\source\repos\DockerConsoleApp\VolumeTest:C:\app\logs
Run Code Online (Sandbox Code Playgroud)
问题是,一旦我手动构建或运行“docker-compose up -d”,容器就会被创建,然后立即死亡。我希望容器应该保持运行状态,因为应用程序正在入口点中被调用,并且应用程序应该继续运行,除非手动停止。
在 docker run 命令中,有 --add-host 选项。这不适用于 Windows 容器。
同样,撰写文件中有一个配置选项 extra_host.txt。这也不适用于 Windows 容器。
有什么具体原因,这不适用于 Windows 容器吗?
我有一个带有 Java spring boot 应用程序的 docker 映像,该应用程序在端口 8080 的 docker 容器中启动和运行没有问题,正如您在部分日志中看到的那样:
\n\n 2020-02-24 02:09:07.906 INFO : Tomcat started on port(s): 8080 (http) with context path \'/web-app\'\n 2020-02-24 02:09:07.909 INFO : Started web-app in 7.034 seconds (JVM running for 7.601)\nRun Code Online (Sandbox Code Playgroud)\n\n如果我在容器内运行curl命令(使用终端),我会得到正确的响应,表明服务器正在运行并且正在运行。
\n\n/# curl http://localhost:8080/web-app/cars/1\n{"id":"1"}\nRun Code Online (Sandbox Code Playgroud)\n\n现在,当我尝试访问主机上的应用程序时,问题就来了,我正在使用 Windows 10 顺便说一句(在网络浏览器中http://localhost:8080/web-app/cars/1),这里是如何我运行泊坞窗图像。
\n\ndocker run web-app -p 8080:8080\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我不认为这是 Windows 问题,因为我可以运行一个简单的 nginx 服务器,并且可以毫无问题地在主机上访问它。
\n\ndocker run -d -p 80:80 nginx\nRun Code Online (Sandbox Code Playgroud)\n\n我注意到的一件事是当看到正在运行的容器时,端口列
\n\nC:\\Users\\luis>docker ps\nCONTAINER ID IMAGE COMMAND CREATED …Run Code Online (Sandbox Code Playgroud) 我试图将主机文件夹映射到guest虚拟机,方法与在linux/mac上轻松完成相同-v "$(pwd)":/code.我无法想出一个简单的例子来使用Windows Containers.
docker build -t="webdav" .
docker run --rm -it -v C:\junk:C:\code --name webdav webdav powershell
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: container f0fa313478fddb73e34d47699de0fc3c2a3bdb202ddcfc2a124c5c8b7523ec09 encountered an error during Start: failure in a Windows system call: The connection with the Virtual Machine hosting the container was closed. (0xc037010a).
Run Code Online (Sandbox Code Playgroud)
我尝试了无数其他变化,这里接受的答案给出了同样的错误.
该文档似乎只指泊坞工具箱.这个例子只给了我invalid bind mount spec.
我的Dockerfile
FROM microsoft/windowsservercore
RUN powershell -Command Add-WindowsFeature Web-Server
RUN powershell -Command mkdir /code
WORKDIR /code
ADD * /code/
Run Code Online (Sandbox Code Playgroud)
操作系统名称:Microsoft …
我尝试使用 Docker windows 更改卷上文件/文件夹的权限。但出乎意料的是,权限没有改变。
环境: 主机:Windows 10 Pro Docker 版本 17.09.0-ce,构建 afdb6d4
重现步骤:
Dockerfile:
FROM microsoft/windowsservercore
CMD [ "powershell" ]
Run Code Online (Sandbox Code Playgroud)
输出:
D:\data\docker\sample>docker build -t sample .
Sending build context to Docker daemon 1.272GB
Step 1/2 : FROM microsoft/windowsservercore
---> 2cddde20d95d
Step 2/2 : CMD powershell
---> Running in dd207fe8b262
---> e0203df155cd
Removing intermediate container dd207fe8b262
Successfully built e0203df155cd
Successfully tagged sample:latest
D:\data\docker\sample>docker run -d --name sample --mount type=volume,source=sample_volume,target=C:/data sample ping -t localhost
5a21f41d63de321e912ec3b99010a062d2e04d5f99145c6cd8bf649d3fbbebf1
D:\data\docker\sample>docker exec …Run Code Online (Sandbox Code Playgroud) 无法在 dockerfile 中的 docker for windows 上执行 CMD 命令。
我想使用 CMD 运行几个命令,但是,甚至无法运行单个命令。
我已经尝试了以下方法,但没有任何效果......
1.
CMD "sqlcmd -S database -i C:\db\db_scripts\upgradescript.sql -U sa -P mypassword"
Run Code Online (Sandbox Code Playgroud)
2.
RUN ["powershell", "-NoProfile", "-Command", "c:\db\db_scripts\script.ps1"]
Run Code Online (Sandbox Code Playgroud)
3.
CMD ["cmd", "sqlcmd", "-S", "database", "-i", "C:\db\db_scripts\upgradescript.sql", "-U", "sa", "-P", "mypassword"]
Run Code Online (Sandbox Code Playgroud)
4.
ARG arg1=database
ARG arg2=C:\db\db_scripts\upgradescript.sql
ARG arg3=sa
ARG arg4=mypassword!
RUN ["cmd", "-NoProfile", "-Command", "sqlcmd -S $env:arg1 -i $env:arg2 -U $env:arg3 -P $env:arg4"]
Run Code Online (Sandbox Code Playgroud)
5.
RUN powershell.exe c:\db\db_scripts\script.ps1
Run Code Online (Sandbox Code Playgroud)
6.
ENTRYPOINT ["powershell", "-NoProfile", "-Command", "sqlcmd"]
CMD ["-S database -i C:\db\db_scripts\upgradescript.sql -U …Run Code Online (Sandbox Code Playgroud) containers docker dockerfile docker-container docker-for-windows
~/.kube/config在设置对基于云的 K8s 集群的访问时,我的 Docker for Windows文件被替换。
有没有办法重新创建它而无需重新启动 Docker for Windows Kubernetes?
更新
我当前的~/.kube/config文件现已设置为 GKE 集群。我不想为 Kubernetes 重置 Docker 并破坏它。相反,我想为 Windows 版 Docker 创建一个单独的 kubeconfig 文件,即将其放置在其他位置而不是~/.kube/config.
我正在运行 Docker for Windows 的内置 Kubernetes 集群以进行开发,我需要对集群运行一些 Docker 命令,但我找不到 Minikube 的“minikube docker-env”的替代品。
我想做这样的事情来操作 Kubernetes 集群:
eval $(minikube docker-env)
Run Code Online (Sandbox Code Playgroud)
我想在完成 Kubernetes 集群后做这样的事情:
eval $(docker-machine env -u)
Run Code Online (Sandbox Code Playgroud) 每次启动计算机时,Docker.Service 服务都会加载到我的内存中。
系统:Windows 10 Pro 1903、Docker 2.0.0.3
我试图通过以下方式避免这种情况:
重新启动计算机后,Docker.Service 仍然出现在我的任务管理器中。如何防止我的计算机在启动时加载 Docker.Service?
以下是我的 dockerfile:
FROM python:3.6.5-windowsservercore
COPY . /app
WORKDIR /app
RUN pip download -r requirements.txt -d packages
Run Code Online (Sandbox Code Playgroud)
要获取图像中的文件列表,我尝试了以下两个选项,但出现错误:
encountered an error during CreateProcess: failure in a Windows system call:
The system cannot find the file specified. (0x2) extra info:
{"CommandLine":"dir","WorkingDirectory":"C:\\app"......
Run Code Online (Sandbox Code Playgroud)
docker run -it <container_id> dirCMD ["dir"],然后运行docker run <container_id> dir如何列出docker中的所有目录和文件?
docker dockerfile docker-image docker-container docker-for-windows
docker ×10
containers ×2
dockerfile ×2
kubernetes ×2
windows ×2
.net ×1
docker-image ×1
windows-10 ×1