성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 공유 감사합니다. ^^ 참고로, WPF에서 WindowsF...
[Tom Lee] 답변 감사합니다. 나름의 해결책 연구해보고 여기에도 공유해봅니다...
[정성태] 아래의 글을 보면, MoveWindow 하면 될 듯한데요. ^^...
[Tom Lee] 안녕하세요 올려주신 글 참고하여 WPF 어플리케이션 안에 Uni...
[정성태] A graphical depiction of the steps ...
[정성태] 질문을 주셔서 출판사 측에 문의를 했습니다. 약 한 달 정도 후...
[Thorondor
] @정성태 개인 블로그인데도 거의 커뮤니티 급 인 것 같아요. 요...
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>간단하게 살펴보는 Docker for Windows</h1> <p> 예전에 Windows Containers를 설명해 드렸는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Windows 10에서 경험해 보는 Windows Containers와 docker ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11013'>http://www.sysnet.pe.kr/2/0/11013</a> </pre> <br /> 사실, 순서상으로 보면 "Docker for Windows"를 먼저 살펴보는 것이 더 낫습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Docker for Windows ; <a target='tab' href='https://www.docker.com/docker-windows'>https://www.docker.com/docker-windows</a> </pre> <br /> 이를 설치하면 컴퓨터에 2가지 변화가 생깁니다.<br /> <br /> <ul> <li>"Docker for Windows Service" NT 서비스 설치 (서비스 명: com.docker.service)</li> <li>Hyper-V에 "MobyLinuxVM" 이름의 Linux 가상 머신 설치</li> </ul> <br /> 그러니까, "docker for windows"는 Hyper-V에 Linux 가상 머신을 설치하고, 기존의 리눅스용 docker 컨테이너들을 그 가상 머신 위에서 실행해 줍니다. 예를 들어, 다음과 같은 "hello-world" image를 Linux 내에 컨테이너로 실행할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp><span style='color: blue; font-weight: bold'>docker run hello-world</span> Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/ // 또는 간단하게 nginx 웹 응용 프로그램을 실행해 확인 $ docker run -d -p 8080:80 --name web nginx $ curl localhost:8080 $ docker stop web $ docker container rm web </pre> <br /> "hello-world" 예제는 화면에 메시지만 출력하고 끝나는 것이 전부입니다. 그런데, "hello-world" image는 어디에 저장되어 있을까요? Linux용 컨테이너이기 때문에 이것은 "DockerDesktopVM(예전에는 MobyLinuxVM)" 가상 머신 내부에 저장됩니다. 따라서 docker 컨테이너 이미지에 대한 관리를 걱정할 필요가 없습니다.<br /> <br /> 덕분에 DockerDesktopVM 가상 머신이 저장되는 .vhdx 파일만 관리하면 되는데, 기본적으로 이것은 다음의 경로에 저장되어 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Users\Public\Documents\Hyper-V\Virtual hard disks\DockerDesktopVM.vhdx </pre> <br /> 이 .vhdx 파일의 경로는 작업 표시줄에 있는 docker 아이콘의 "Settings" 메뉴를 통해 "Advanced" / "Images and volumes VHD location"을 조정해 바꿀 수 있습니다.<br /> <br /> 그 외에, docker의 동작에 대한 로그 내용은 "%LOCALAPPDATA%\Docker\log.txt" 파일로 남으며, docker 관련 설정은 "%APPDATA%\Docker" 폴더에 json 파일로 저장이 됩니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 사실, "docker for windows"는 Linux VM을 기반으로 기존의 Linux용 container image들을 사용할 수 있다는 것이 장점입니다. 이로 인해 .NET 개발자 입장에서는 "Full .NET Framework"용 응용 프로그램을 개발하는 경우에는 별로 사용할 일이 없습니다. 그런 상황에서는 오히려 Windows용 docker인 "Windows Containers"를 사용하는 것이 더 낫습니다.<br /> <br /> 반면, ".NET Core"를 위한 환경으로는 Linux용 docker도 꽤 괜찮은 환경을 제공합니다. 이에 대해서는 다음의 글에도 잘 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Building DockNetFiddle using Docker and .NET Core ; <a target='tab' href='http://www.dotnetcurry.com/windows-azure/1339/docknetfiddle-using-docker-dotnet-core'>http://www.dotnetcurry.com/windows-azure/1339/docknetfiddle-using-docker-dotnet-core</a> </pre> <br /> 실제로 "docker for windows"를 설치했다면 지금 바로 .NET Core가 설치된 linux용 container image를 다운로드해 실행하여 새로운 container를 띄울 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp><span style='color: blue; font-weight: bold'>docker run --rm -it microsoft/dotnet:latest</span> Unable to find image 'microsoft/dotnet:latest' locally latest: Pulling from microsoft/dotnet 10a267c67f42: Pull complete fb5937da9414: Pull complete 9021b2326a1e: Pull complete fc4739726e6e: Pull complete 7ad61ea15136: Pull complete 04b0f5cf120e: Pull complete Digest: sha256:530343cd483dc3e1f62315a3b2382462584d548dd2d936f0378e24310bd67d2a Status: Downloaded newer image for microsoft/dotnet:latest <span style='color: blue; font-weight: bold'>root@caa9d2c42574:/#</span> </pre> <br /> 위의 명령어를 실행하면 linux 내에 활성화된 container가 종료되지 않은 체, 마지막에 보는 것처럼 "root@..."와 같은 shell prompt가 뜹니다.<br /> <br /> 이 상태에서 다음과 같이 ".NET Core"용 Console 프로그램을 container 안에서 생성해 실행해 볼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > root@caa9d2c42574:/# <span style='color: blue; font-weight: bold'>mkdir helloworld</span> root@caa9d2c42574:/# <span style='color: blue; font-weight: bold'>cd helloworld/</span> root@caa9d2c42574:/helloworld# <span style='color: blue; font-weight: bold'>dotnet new console</span> Content generation time: 50.326 ms The template "Console Application" created successfully. root@caa9d2c42574:/helloworld# <span style='color: blue; font-weight: bold'>dotnet restore</span> Restoring packages for /helloworld/helloworld.csproj... Generating MSBuild file /helloworld/obj/helloworld.csproj.nuget.g.props. Generating MSBuild file /helloworld/obj/helloworld.csproj.nuget.g.targets. Writing lock file to disk. Path: /helloworld/obj/project.assets.json Restore completed in 418.38 ms for /helloworld/helloworld.csproj. NuGet Config files used: /root/.nuget/NuGet/NuGet.Config Feeds used: https://api.nuget.org/v3/index.json root@caa9d2c42574:/helloworld# <span style='color: blue; font-weight: bold'>ls</span> Program.cs helloworld.csproj obj root@caa9d2c42574:/helloworld# <span style='color: blue; font-weight: bold'>dotnet run</span> Hello World! root@caa9d2c42574:/helloworld# </pre> <br /> 보는 바와 같이, 호스트의 환경에 전혀 영향을 주지 않으면서 빠르게 .NET Core 환경을 자유롭게 사용자 정의해 테스트해볼 수 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 그런데, 위의 실습에서 "exit" 명령어로 shell을 빠져나오면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > root@caa9d2c42574:/helloworld# <span style='color: blue; font-weight: bold'>exit</span> exit c:\temp> </pre> <br /> 실행 중에 변경된 사항들이 전부 없어지게 됩니다. 확인을 위해 다시 "microsoft/dotnet" image로부터 새로운 컨테이너를 실행하는 경우 "helloworld" 콘솔 프로그램이 안 보입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp><span style='color: blue; font-weight: bold'>docker run --rm -it microsoft/dotnet:latest</span> root@ec9ab85d404b:/# <span style='color: blue; font-weight: bold'>ls</span> bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var </pre> <br /> 왜냐하면, "docker run"과 함께 "--rm" 옵션을 주었기 때문에 컨테이너 내부의 프로세스가 종료되면 컨테이너 자체도 삭제되기 때문입니다. 따라서 "--rm" 옵션을 빼고 실행하는 경우,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp><span style='color: blue; font-weight: bold'>docker run -it --name test microsoft/dotnet /bin/bash</span> root@50fe6dd91068:/# <span style='color: blue; font-weight: bold'>mkdir helloworld</span> root@50fe6dd91068:/# <span style='color: blue; font-weight: bold'>ls</span> bin boot dev etc <span style='color: blue; font-weight: bold'>helloworld</span> home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@50fe6dd91068:/# <span style='color: blue; font-weight: bold'>exit</span> exit </pre> <br /> exit로 종료했지만 "docker ps -a" 명령어로 살펴보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp><span style='color: blue; font-weight: bold'>docker ps -a</span> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50fe6dd91068 microsoft/dotnet "/bin/bash" 6 minutes ago Exited (0) 6 minutes ago <span style='color: blue; font-weight: bold'>test</span> /* // 만약 exited인 컨테이너를 모두 삭제하고 싶다면, [리눅스] docker rm $(docker ps -a -f "status=exited" -q) [윈도우] FOR /F %i IN ('docker ps -a -f "status=exited" -q') do docker rm %i // 또는, 모든 컨테이너를 삭제하고 싶다면, [리눅스] docker rm $(docker ps -a -q) [윈도우] FOR /F %i IN ('docker ps -a -q') do docker rm %i */ </pre> <br /> 보는 바와 같이 container가 (삭제되지 않고) 종료만 된 상태임을 알 수 있고, 이를 "docker start" 명령어로 다시 실행한 후 "docker attach"로 연결할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp><span style='color: blue; font-weight: bold'>docker start test</span> test C:\temp><span style='color: blue; font-weight: bold'>docker attach test</span> root@50fe6dd91068:/# root@50fe6dd91068:/# <span style='color: blue; font-weight: bold'>ls</span> bin boot dev etc <span style='color: blue; font-weight: bold'>helloworld</span> home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@50fe6dd91068:/# <span style='color: blue; font-weight: bold'>exit</span> exit </pre> <br /> 동일한 container이기 때문에 이번에는 "helloworld" 디렉터리가 존재합니다. 즉, 변화는 container 단위로만 유효하고 그 원본 이미지(예제에서는 microsoft/dotnet)는 영향이 없는 것입니다.<br /> <br /> 물론, 이러한 변화를 container 단위에 종속시키지 않고 지속하는 방법이 있습니다.<br /> <br /> 가령, helloworld 응용 프로그램을 container가 아닌 호스트 측에 생성하고, container가 실행될 때 호스트 측의 파일 시스템을 연결해 주는 방법이 있습니다. 잠시 실습을 해보면, 호스트 측의 c:\temp\helloworld 폴더에 helloworld 콘솔 프로젝트를 만들고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\helloworld><span style='color: blue; font-weight: bold'>dotnet new console</span> Content generation time: 51.336 ms The template "Console Application" created successfully. C:\temp\helloworld><span style='color: blue; font-weight: bold'>dotnet restore</span> Restoring packages for C:\temp\helloworld\helloworld.csproj... Generating MSBuild file C:\temp\helloworld\obj\helloworld.csproj.nuget.g.props. Generating MSBuild file C:\temp\helloworld\obj\helloworld.csproj.nuget.g.targets. Writing lock file to disk. Path: C:\temp\helloworld\obj\project.assets.json Restore completed in 853.51 ms for C:\temp\helloworld\helloworld.csproj. NuGet Config files used: C:\Users\kevin\AppData\Roaming\NuGet\NuGet.Config C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config Feeds used: https://api.nuget.org/v3/index.json C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\ C:\temp\helloworld><span style='color: blue; font-weight: bold'>dotnet run</span> Hello World! </pre> <br /> "microsoft/dotnet" 컨테이너를 실행할 때 이렇게 연결해 줄 수 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\helloworld><span style='color: blue; font-weight: bold'>docker run --rm -it -v /c/temp/helloworld:/app microsoft/dotnet:latest</span> docker: Error response from daemon: C: drive is not shared. Please share it in Docker for Windows Settings. See 'docker run --help'. </pre> <br /> 에러가 나는군요. ^^ 이것은 "docker for windows"에게 host 측의 폴더를 연결하기 위해 명시적으로 해당 폴더를 포함한 드라이브에 대해 공유를 하겠다고 사전에 Settings를 통해 설정해 주어야 하기 때문입니다.<br /> <br /> <img alt='docker_shared_drive_1.png' src='/SysWebRes/bbs/docker_shared_drive_1.png' /><br /> <br /> 이후, 다시 실행해 보면 정상적으로 host 측의 c:\temp\helloworld 폴더를 /app 경로로 접근할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\helloworld>docker run --rm -it <span style='color: blue; font-weight: bold'>-v /c/temp/helloworld:/app</span> microsoft/dotnet:latest root@633cb764e304:/# <span style='color: blue; font-weight: bold'>ls</span> <span style='color: blue; font-weight: bold'>app</span> bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@633cb764e304:/# <span style='color: blue; font-weight: bold'>cd app</span> root@633cb764e304:/app# <span style='color: blue; font-weight: bold'>ls</span> <span style='color: blue; font-weight: bold'>Program.cs bin helloworld.csproj obj</span> root@633cb764e304:/app# <span style='color: blue; font-weight: bold'>dotnet restore</span> Restoring packages for /app/helloworld.csproj... Generating MSBuild file /app/obj/helloworld.csproj.nuget.g.props. Writing lock file to disk. Path: /app/obj/project.assets.json Restore completed in 483.38 ms for /app/helloworld.csproj. NuGet Config files used: /root/.nuget/NuGet/NuGet.Config Feeds used: https://api.nuget.org/v3/index.json root@633cb764e304:/app# <span style='color: blue; font-weight: bold'>dotnet run</span> Hello World! root@633cb764e304:/app# </pre> <br /> 또한 container 실행 환경에서 /app 디렉터리를 변경하는 경우 그것은 그대로 호스트 측의 c:\temp\helloworld 폴더에 반영됩니다.<br /> <br /> 이렇게 data를 저장할 수 있는 storage를 Data volume이라고 하며 좀 더 자세한 사항은 다음의 문서에서 찾아볼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Manage data in containers ; <a target='tab' href='https://docs.docker.com/engine/tutorials/dockervolumes/'>https://docs.docker.com/engine/tutorials/dockervolumes/</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> -v 옵션을 통해 호스트 측의 폴더를 공유하는 방법 외에, 아예 애당초 기존 container에 변화를 반영해 새롭게 업데이트된 container를 만들 수 있습니다. 이 방법 역시 그다지 어렵지 않습니다. 다음의 내용으로 ".dockerfile" 확장자를 가진 파일을 만들어 줍니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > FROM microsoft/dotnet COPY . /app </pre> <br /> 이 정도의 .dockerfile 내용은 매우 직관적이군요. ^^ 즉, "microsoft/dotnet" 컨테이너를 소스로 현재 폴더의 내용을 새롭게 만들어질 container image의 /app 디렉터리로 복사를 하라는 의미입니다. 이 파일을 이용해 "docker build"를 다음과 같이 실행하면 "microsoft/dotnet" image에 "COPY ..." 명령이 적용된 "helloworld"라는 이름의 새로운 image가 생성됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\helloworld><span style='color: blue; font-weight: bold'>docker build -t helloworld -f helloworld.dockerfile .</span> Sending build context to Docker daemon 241.7 kB Step 1/2 : FROM microsoft/dotnet ---> 6ca1a97bf17b Step 2/2 : COPY . /app ---> 0abaf687b8b9 Removing intermediate container ab3a20afa915 Successfully built 0abaf687b8b9 SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories. </pre> <br /> 따라서, 이제 -v 옵션 없이도 새롭게 생성된 container에서 만들어 두었던 helloworld 콘솔 프로그램을 곧바로 사용할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\helloworld><span style='color: blue; font-weight: bold'>docker run --rm -it helloworld</span> root@d751a0b807b1:/# <span style='color: blue; font-weight: bold'>cd app</span> root@d751a0b807b1:/app# <span style='color: blue; font-weight: bold'>dotnet run</span> Hello World! root@d751a0b807b1:/app# </pre> <br /> 이 정도면 대충 어떻게 돌아가는지 감 잡으시겠죠? ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> <a name='kitematic'></a> 마지막으로 유용한 "Kitematic" 도구를 잠시 살펴보겠습니다.<br /> <br /> "Docker for Windows" 덕분에 사실 윈도우 10의 "Bash on Ubuntu on Windows"가 그다지 필요하지 않을 정도입니다. 게다가 Linux용으로 제작된 숱한 응용 프로그램들이 포함된 docker container image들이 널려 있기 때문에 개발 환경이 더욱 편해지게 됩니다.<br /> <br /> 작업 표시줄의 시스템 트레이에 있는 "docker" 아이콘을 우클릭해 "Kitematic" 메뉴를 선택하면 "Kitematic" 응용 프로그램을 다운로드할 수 있습니다. "Kitematic-Windows.zip" 파일의 압축을 풀고 그 안에 있는 "Kitematic.exe"를 실행하기만 하면 다음과 같은 공개된 container image 목록을 열람할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='docker_shared_drive_2.png' src='/SysWebRes/bbs/docker_shared_drive_2.png' /><br /> <br /> 보기만 해도 행복하군요. ^^<br /> <br /> 또한, 현재 설치된 이미지도 확인할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='docker_shared_drive_3.png' src='/SysWebRes/bbs/docker_shared_drive_3.png' /><br /> <br /> 위의 목록에서 각 이미지마다 붙어 있는 "CREATE" 버튼을 누르면 "docker run" 명령어를 내린 것이 되어 해당 image로부터 container가 인스턴스화되어 실행됩니다. 또한 실행 및 중지된 컨테이너 목록도 확인할 수 있고, 실행 중인 경우 "EXEC" 버튼을 통해 interactive shell 화면으로 진입할 수도 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='docker_shared_drive_4.png' src='/SysWebRes/bbs/docker_shared_drive_4.png' /><br /> <br /> 한마디로, Kitematic 덕분에 별다르게 docker 명령어를 알지 못해도 손쉬운 관리가 가능합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, "Docker Desktop.exe"가 수행하는 작업은 "%LOCALAPPDATA%\Docker\log.txt" 파일에 기록되며, 아래는 정상적으로 수행된 경우의 로그 내용을 보여줍니다.<br /> <br /> <pre style='height: 400px; margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Version: 2.2.0.3 (42716) Channel: stable Sha1: e11f25edf9f955239c922a0251699b23aaf37984 Started on: 2020/03/03 12:31:46.239 Resources: C:\Program Files\Docker\Docker\resources OS: Windows Server 2019 Datacenter Edition: ServerDatacenter Id: 1809 Build: 17763 BuildLabName: 17763.1.amd64fre.rs5_release.180914-1434 File: C:\ProgramData\DockerDesktop\service.txt CommandLine: "C:\Program Files\Docker\Docker\com.docker.service" You can send feedback, including this log file, at https://github.com/docker/for-win/issues [12:31:46.349][DockerService ][Info ] Starting service [12:31:46.364][ComponentVersions ][Info ] Edition community [12:31:46.396][ComponentVersions ][Info ] Edition community [12:31:46.427][Linux ][Info ] Setting container engine status to Stopped [12:31:46.427][WslEngine ][Info ] Setting container engine status to Stopped [12:31:46.427][BackendNamedPipeServer][Info ] Started [12:31:48.366][NamedPipeServer ][Info ] app/version() [12:31:48.382][NamedPipeServer ][Info ] app/version done in 00:00:00.0156370. [12:31:48.382][NamedPipeServer ][Info ] app/migrate() [12:31:48.382][NamedPipeServer ][Info ] app/migrate done in 00:00:00. [12:31:48.397][NamedPipeServer ][Info ] app/version() [12:31:48.397][NamedPipeServer ][Info ] app/version done in 00:00:00. [12:31:48.397][NamedPipeServer ][Info ] version-packs/enable(community, Docker.Core.Settings) [12:31:48.397][NamedPipeServer ][Info ] version-packs/enable done in 00:00:00. [12:31:48.397][NamedPipeServer ][Info ] app/version() [12:31:48.397][NamedPipeServer ][Info ] app/version done in 00:00:00. [12:31:48.397][NamedPipeServer ][Info ] engine/start(Linux, Docker.Core.Settings, Docker.Core.DaemonOptions, ) [12:31:48.444][Linux ][Info ] Setting container engine status to Starting [12:31:48.460][PowerShell ][Info ] Creating a Runspace Pool... [12:31:48.649][PowerShell ][Info ] Runspace Pool created (Min=1, Max=2) [12:31:48.805][PowerMode ][Info ] Stop [12:31:48.805][HyperV ][Info ] Stop [12:31:48.805][PowerShell ][Info ] Run script with parameters: -Stop True -VmName DockerDesktopVM -SwitchName DockerNAT -Verbose True -ErrorAction Stop [12:31:49.176][GoBackendProcess ][Info ] ??http server started on \\.\pipe\dockerVpnKitControl [12:31:49.176][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="started port-forwarding control server on \\\\.\\pipe\\dockerVpnKitControl" [12:31:49.176][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="listening on unix:\\\\.\\pipe\\dockerVpnkitData for data connection" [12:31:49.176][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="grpcfuseV2 feature-flag set so enabling FUSE cache invalidation and event injection" [12:31:49.178][GoBackendProcess ][Info ] ??http server started on \\.\pipe\dockerBackendApiServer [12:31:49.179][GoBackendProcess ][Info ] ??http server started on \\.\pipe\dockerBackendApiServerForGuest [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="Adding filesystem export C:\\" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="Adding filesystem export D:\\" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="Adding filesystem export E:\\" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="Adding filesystem export F:\\" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="Adding filesystem export G:\\" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="enabling filesystem caching" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="enabling inotify event injection" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="filesystem exports are: C:\\ (2),D:\\ (3),E:\\ (4),F:\\ (5),G:\\ (6)" [12:31:49.259][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="volume control server listening on \\\\.\\pipe\\dockerVolume" [12:31:49.262][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="filesystem server listening on 00000000-0000-0000-0000-000000000000:00001003-facb-11e6-bd58-64006a7986d3" [12:31:49.262][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="file ownership will be determined by the calling user (\"fake owner\" mode)" [12:31:49.262][GoBackendProcess ][Info ] time="2020-03-03T12:31:49+09:00" msg="using mfsymlinks" [12:31:50.417][HyperV ][Info ] VM DockerDesktopVM is stopped [12:31:50.417][HyperV ][Debug ] [stop] took 00:00:01.6117682 to run [12:31:50.417][OptimizeDisk ][Info ] Optimize [12:31:50.417][PowerShell ][Info ] Run script... [12:31:51.747][APIRequestLogger ][Info ] [98a14d05] <GoBackendClient start> GET http://localhost/features [12:31:51.810][GoBackendProcess ][Info ] time="2020-03-03T12:31:51+09:00" msg="external: GET /features 200 \"\" \"\"" [12:31:51.837][APIRequestLogger ][Info ] [98a14d05] <GoBackendClient end> GET http://localhost/features -> 200 OK (took 75ms) [12:31:51.880][VpnKitBridge ][Info ] Starting C:\Program Files\Docker\Docker\resources\vpnkit-bridge.exe --addr listen://00000000-0000-0000-0000-000000000000/000007CF-FACB-11E6-BD58-64006A7986D3 host [12:31:51.880][VpnKitBridge ][Info ] Started [12:31:51.880][HyperVGuids ][Info ] Installing GUIDs... [12:31:51.880][PowerMode ][Info ] Start [12:31:51.880][HyperVGuids ][Info ] GUIDs installed [12:31:51.896][Firewall ][Info ] Removing all existing rules... [12:31:51.896][HyperV ][Info ] Create [12:31:51.912][HyperV ][Info ] filesharing does not need a Hyper-V NIC so omitting it [12:31:51.916][PowerShell ][Info ] Run script with parameters: -Create True -VmName DockerDesktopVM -VhdPathOverride D:\docker\DockerDesktop.vhdx -VhdSize 63999836160 -SwitchSubnetAddress 10.0.75.0 -SwitchSubnetMaskSize 24 -PreferredIPAddress -CPUs 2 -Memory 2048 -IsoFile C:\Program Files\Docker\Docker\resources\docker-desktop.iso -SwitchName -Verbose True -ErrorAction Stop [12:31:51.925][Firewall ][Info ] All existing rules are removed. [12:31:51.925][Firewall ][Info ] Opening ports for SMB... [12:31:51.933][VpnKitBridge ][Info ] time="2020-03-03T12:31:51+09:00" msg="listening on listen://00000000-0000-0000-0000-000000000000/000007CF-FACB-11E6-BD58-64006A7986D3..." [12:31:51.936][VpnKitBridge ][Info ] time="2020-03-03T12:31:51+09:00" msg="waiting for connection on listen://00000000-0000-0000-0000-000000000000/000007CF-FACB-11E6-BD58-64006A7986D3..." [12:31:51.936][Firewall ][Info ] Ports are opened [12:31:53.312][HyperV ][Info ] Setting CPUs to 2 and Memory to 2048 MB [12:31:53.624][HyperV ][Info ] Remove existing DVDs [12:31:54.780][HyperV ][Info ] Attach DVD C:\Program Files\Docker\Docker\resources\docker-desktop.iso [12:31:55.538][HyperV ][Info ] Disabled Guest Service Interface [12:31:55.553][HyperV ][Info ] Enabled Heartbeat [12:31:55.585][HyperV ][Info ] Disabled Key-Value Pair Exchange [12:31:55.600][HyperV ][Info ] Enabled Shutdown [12:31:55.616][HyperV ][Info ] Enabled Time Synchronization [12:31:55.631][HyperV ][Info ] Disabled VSS [12:31:55.757][HyperV ][Info ] VM created. [12:31:55.757][HyperV ][Debug ] [create] took 00:00:03.8449903 to run [12:31:55.757][PowerShell ][Info ] Run script '(Hyper-V\Get-VM DockerDesktopVM).Id.Guid'... [12:31:55.788][IsoConfig ][Info ] Generating CA Cert Bundle [12:31:55.819][IsoConfig ][Info ] CA Cert Bundle Generated [12:31:55.946][HyperV ][Info ] Start [12:31:55.946][PowerShell ][Info ] Run script with parameters: -Start True -VmName DockerDesktopVM -IsoFile C:\Program Files\Docker\Docker\resources\docker-desktop.iso -confIsoFile C:\ProgramData\DockerDesktop\tmp-d4w\config.iso -VhdPathOverride D:\docker\DockerDesktop.vhdx -DockerIsoFile C:\Program Files\Docker\Docker\resources\docker.iso -Verbose True -ErrorAction Stop [12:31:55.993][HyperV ][Info ] Starting VM DockerDesktopVM... [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Setting handler to ignore all SIGPIPE signals [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Version is 218f01482560cba2fa863f9ad872ad51d1e717fc [12:31:56.024][VpnKit ][Info ] vpnkit.exe: System SOMAXCONN is 2147483647 [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Will use a listen backlog of 32 [12:31:56.024][VpnKit ][Info ] vpnkit.exe: No periodic Gc.compact enabled [12:31:56.024][VpnKit ][Error ] vpnkit.exe: Starting to watch : EINVAL [12:31:56.024][VpnKit ][Error ] vpnkit.exe: Failed to watch hosts file : invalid argument [12:31:56.024][VpnKit ][Warning] vpnkit.exe: There is no database: using hardcoded network configuration values [12:31:56.024][VpnKit ][Info ] vpnkit.exe: DNS server configured with no builtin DNS names; everything will be forwarded [12:31:56.024][VpnKit ][Info ] vpnkit.exe: 2 upstream DNS servers are configured [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Disabling transparent HTTP redirection [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Updating resolvers to use host resolver [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Secure random number generator is available [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Add(3): DNS configuration changed to: use host resolver [12:31:56.024][VpnKit ][Info ] vpnkit.exe: DNS server configured with builtin DNS names [ gateway.docker.internal -> 192.168.65.1, docker.for.win.gateway.internal -> 192.168.65.1, docker.for.win.http.internal -> 192.168.65.1, host.docker.internal -> 192.168.65.2, docker.for.win.host.internal -> 192.168.65.2, docker.for.win.localhost -> 192.168.65.2, vm.internal -> 192.168.65.3 ] [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Will use the host's DNS resolver [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Transparent HTTP redirection configuration file %USERPROFILE%\AppData\Roaming\Docker\http_proxy.json has changed [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Reading transparent HTTP redirection from %USERPROFILE%\AppData\Roaming\Docker\http_proxy.json [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Watching transparent HTTP redirection configuration file %USERPROFILE%\AppData\Roaming\Docker\http_proxy.json for changes [12:31:56.024][VpnKit ][Info ] vpnkit.exe: New Gateway forward configuration: [] [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Gateway forwards file %USERPROFILE%\AppData\Roaming\Docker\gateway_forwards.json has changed [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Reading gateway forwards file from %USERPROFILE%\AppData\Roaming\Docker\gateway_forwards.json [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Watching gateway forwards file %USERPROFILE%\AppData\Roaming\Docker\gateway_forwards.json for changes [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Configuration server_macaddr = f6:16:36:bc:f9:c6; max_connection = None; dns_path = None; dns = ; resolver = Host; domain = None; allowed_bind_addresses = 0.0.0.0; gateway_ip = 192.168.65.1; host_ip = 192.168.65.2; lowest_ip = 192.168.65.3; highest_ip = 192.168.65.14; dhcp_json_path = None; dhcp_configuration = None; mtu = 1500; http_intercept = None; http_intercept_path = %USERPROFILE%\AppData\Roaming\Docker\http_proxy.json; port_max_idle_time = 300; host_names = host.docker.internal, docker.for.win.host.internal, docker.for.win.localhost; gateway_names = gateway.docker.internal, docker.for.win.gateway.internal, docker.for.win.http.internal; vm_names = vm.internal; udpv4_forwards = []; tcpv4_forwards = []; gateway_forwards_path = %USERPROFILE%\AppData\Roaming\Docker\gateway_forwards.json; pcap_snaplen = 128 [12:31:56.024][VpnKit ][Info ] vpnkit.exe: Updating transparent HTTP redirection: { [12:31:56.024][VpnKit ][Info ] "exclude": "", [12:31:56.024][VpnKit ][Info ] "transparent_http_ports": [ [12:31:56.024][VpnKit ][Info ] 80 [12:31:56.024][VpnKit ][Info ] ], [12:31:56.024][VpnKit ][Info ] "transparent_https_ports": [ [12:31:56.024][VpnKit ][Info ] 443 [12:31:56.024][VpnKit ][Info ] ] [12:31:56.024][VpnKit ][Info ] } [12:31:56.024][VpnKit ][Info ] vpnkit.exe: New Gateway forward configuration: [{"protocol":"udp","external_port":53,"internal_ip":"127.0.0.1","internal_port":55786},{"protocol":"tcp","external_port":53,"internal_ip":"127.0.0.1","internal_port":20042}] [12:31:56.043][VpnKit ][Error ] vpnkit.exe: While watching /etc/resolv.conf: ENOENT [12:31:56.119][HyperV ][Info ] Remove existing DVDs [12:31:56.477][HyperV ][Info ] Attach DVD C:\Program Files\Docker\Docker\resources\docker-desktop.iso [12:31:56.743][HyperV ][Info ] Attach Config ISO C:\ProgramData\DockerDesktop\tmp-d4w\config.iso [12:31:57.302][HyperV ][Info ] Attach Docker ISO C:\Program Files\Docker\Docker\resources\docker.iso [12:31:58.505][HyperV ][Debug ] [start] took 00:00:02.5588752 to run [12:31:58.536][LifecycleClient ][Info ] Waiting for lifecycle-server for up to 00:10:00 [12:31:58.536][APIRequestLogger ][Info ] [98a14d05] <LifecycleClient start> GET http://localhost/ping [12:31:58.628][ApiProxy ][Info ] time="2020-03-03T12:31:58+09:00" msg="?? socket server listening : \\\\.\\pipe\\dockerGuiToDriver" [12:31:58.631][ApiProxy ][Info ] time="2020-03-03T12:31:58+09:00" level=info msg=waitForDockerUp [12:31:58.631][ApiProxy ][Info ] time="2020-03-03T12:31:58+09:00" msg="?? socket server starting : \\\\.\\pipe\\dockerGuiToDriver" [12:31:58.631][ApiProxy ][Info ] time="2020-03-03T12:31:58+09:00" msg="Static DNS lookup table: map[docker-desktop.:192.168.65.3 docker-for-desktop.:192.168.65.3 docker.for.win.gateway.internal.:192.168.65.1 docker.for.win.host.internal.:192.168.65.2 docker.for.win.http.internal.:192.168.65.1 docker.for.win.localhost.:192.168.65.2 gateway.docker.internal.:192.168.65.1 host.docker.internal.:192.168.65.2 kubernetes.docker.internal.:192.168.65.3 vm.docker.internal.:192.168.65.3]" [12:31:58.632][ApiProxy ][Info ] time="2020-03-03T12:31:58+09:00" msg="Writing %USERPROFILE%\\AppData\\Roaming\\Docker\\gateway_forwards.json" [12:32:01.044][VpnKit ][Info ] vpnkit.exe: Gateway forwards file %USERPROFILE%\AppData\Roaming\Docker\gateway_forwards.json has changed [12:32:01.044][VpnKit ][Info ] vpnkit.exe: Reading gateway forwards file from %USERPROFILE%\AppData\Roaming\Docker\gateway_forwards.json [12:32:01.044][VpnKit ][Info ] vpnkit.exe: New Gateway forward configuration: [{"protocol":"udp","external_port":53,"internal_ip":"127.0.0.1","internal_port":64979},{"protocol":"tcp","external_port":53,"internal_ip":"127.0.0.1","internal_port":20136}] [12:32:03.184][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="connected!" [12:32:03.197][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="Proxy docker: waiting for remote service to be available" [12:32:03.197][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="Proxy log: waiting for remote service to be available" [12:32:03.197][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="Proxy lifecycle-server: waiting for remote service to be available" [12:32:03.198][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="Proxy diagnosticd: waiting for remote service to be available" [12:32:03.198][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="Proxy filesystem-event: waiting for remote service to be available" [12:32:03.198][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="Proxy wsl2-bootstrap-expose-ports: waiting for remote service to be available" [12:32:03.214][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="cannot find service \"ssh-auth\"" [12:32:03.222][VpnKitBridge ][Info ] time="2020-03-03T12:32:03+09:00" msg="received ack for service log, publishing locally" [12:32:03.262][VpnKit ][Error ] vpnkit.exe: Pipe.listen: caught (Failure "Failed to connect vmnet device") [12:32:03.288][GoBackendProcess ][Info ] time="2020-03-03T12:32:03+09:00" msg="accepted data connection on unix:\\\\.\\pipe\\dockerVpnkitData" [12:32:03.288][GoBackendProcess ][Error ] time="2020-03-03T12:32:03+09:00" msg="error accepting multiplexer data connection: EOF" [12:32:03.288][GoBackendProcess ][Info ] time="2020-03-03T12:32:03+09:00" msg="listening on unix:\\\\.\\pipe\\dockerVpnkitData for data connection" [12:32:38.336][VpnKitBridge ][Info ] time="2020-03-03T12:32:38+09:00" msg="received ack for service diagnosticd, publishing locally" [12:32:39.632][GoBackendProcess ][Info ] time="2020-03-03T12:32:39+09:00" msg="internal: GET /ping 200 \"Go-http-client/1.1\" \"\"" [12:32:39.634][GoBackendProcess ][Info ] time="2020-03-03T12:32:39+09:00" msg="internal: GET /goos 200 \"Go-http-client/1.1\" \"\"" [12:32:39.962][GoBackendProcess ][Info ] time="2020-03-03T12:32:39+09:00" msg="internal: POST /events 200 \"Go-http-client/1.1\" \"\"" [12:32:40.321][VpnKitBridge ][Info ] time="2020-03-03T12:32:40+09:00" msg="received ack for service filesystem-event, publishing locally" [12:32:40.358][VpnKitBridge ][Info ] time="2020-03-03T12:32:40+09:00" msg="received ack for service lifecycle-server, publishing locally" [12:32:40.384][APIRequestLogger ][Info ] [98a14d05] <LifecycleClient end> GET http://localhost/ping -> 200 OK (took 41842ms) [12:32:40.411][LifecycleClient ][Info ] Lifecycle-server is responding. [12:32:40.418][Linux ][Info ] All drives mounted, starting the Docker engine [12:32:40.419][APIRequestLogger ][Info ] [98a14d05] <LifecycleClient start> GET http://localhost/docker/start [12:32:40.433][GoBackendProcess ][Info ] time="2020-03-03T12:32:40+09:00" msg="internal: GET /engine/daemon.json 200 \"Go-http-client/1.1\" \"\"" [12:32:40.439][APIRequestLogger ][Info ] [98a14d05] <LifecycleClient end> GET http://localhost/docker/start -> 200 OK (took 20ms) [12:32:40.439][Linux ][Info ] Docker engine is starting [12:32:41.316][VpnKit ][Info ] vpnkit.exe: Vmnet.Server.negotiate: received { magic = VMN3T; version = 22; commit = } [12:32:41.318][VpnKit ][Info ] vpnkit.exe: Generated UUID on behalf of client: e0075240-54d7-4e3c-a775-099bfa0879f4 [12:32:41.318][VpnKit ][Info ] vpnkit.exe: Vmnet.Server.negotiate: received Ethernet e0075240-54d7-4e3c-a775-099bfa0879f4 [12:32:41.318][VpnKit ][Info ] vpnkit.exe: Vmnet.Server.negotiate: sending { mtu = 1500; max_packet_size = 1550; client_macaddr = 02:50:00:00:00:01 } [12:32:41.318][VpnKit ][Info ] vpnkit.exe: Vmnet.Server.listen: rebinding the primary listen callback [12:32:41.318][VpnKit ][Info ] vpnkit.exe: Vmnet.Server.listen: starting event loop [12:32:41.318][VpnKit ][Info ] vpnkit.exe: Connected Ethernet interface f6:16:36:bc:f9:c6 [12:32:41.319][VpnKit ][Info ] vpnkit.exe: Client mac: 02:50:00:00:00:01 server mac: f6:16:36:bc:f9:c6 [12:32:41.319][VpnKit ][Info ] vpnkit.exe: TCP/IP ready [12:32:41.319][VpnKit ][Info ] vpnkit.exe: TCP/IP stack connected [12:32:41.319][VpnKit ][Info ] vpnkit.exe: Starting diagnostics server on: \\.\pipe\dockerVpnKitDiagnostics [12:32:41.646][GoBackendProcess ][Info ] time="2020-03-03T12:32:41+09:00" msg="accepted data connection on unix:\\\\.\\pipe\\dockerVpnkitData" [12:32:41.646][GoBackendProcess ][Info ] time="2020-03-03T12:32:41+09:00" msg="established connection to vpnkit-forwarder" [12:32:42.016][GoBackendProcess ][Info ] time="2020-03-03T12:32:42+09:00" msg="internal: POST /events 200 \"Go-http-client/1.1\" \"\"" [12:32:44.790][VpnKitBridge ][Info ] time="2020-03-03T12:32:44+09:00" msg="received ack for service docker, publishing locally" [12:32:48.836][VpnKit ][Info ] vpnkit.exe: Connected Ethernet interface f6:16:36:bc:f9:c6 [12:32:48.837][VpnKit ][Info ] vpnkit.exe: UDP interface connected on 192.168.65.1 [12:32:48.841][ApiProxy ][Info ] time="2020-03-03T12:32:48+09:00" msg="Docker is responding" [12:32:48.855][NamedPipeServer ][Info ] app/version() [12:32:48.855][NamedPipeServer ][Info ] app/version done in 00:00:00. [12:32:48.856][NamedPipeServer ][Info ] engine/notify-linux-status(DaemonStarted) [12:32:48.856][Linux ][Info ] Setting container engine status to DaemonStarted [12:32:48.856][NamedPipeServer ][Info ] engine/notify-linux-status done in 00:00:00. [12:32:48.857][GoBackendProcess ][Info ] time="2020-03-03T12:32:48+09:00" msg="internal: POST /events 200 \"Go-http-client/1.1\" \"\"" [12:32:48.955][ApiProxy ][Info ] time="2020-03-03T12:32:48+09:00" msg="proxy >> HEAD /_ping\n" [12:32:48.957][ApiProxy ][Info ] time="2020-03-03T12:32:48+09:00" msg="proxy << HEAD /_ping (1.0038ms)\n" [12:32:48.968][ApiProxy ][Info ] time="2020-03-03T12:32:48+09:00" msg="proxy >> GET /v1.40/containers/json\n" [12:32:48.972][ApiProxy ][Info ] time="2020-03-03T12:32:48+09:00" msg="proxy << GET /v1.40/containers/json (3.9988ms)\n" [12:32:48.976][DockerDaemonChecker][Info ] Docker daemon is running [12:32:48.976][Linux ][Info ] Setting container engine status to Started [12:32:48.976][NamedPipeServer ][Info ] engine/start done in 00:01:00.5785086. [12:32:49.104][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> HEAD /_ping\n" [12:32:49.105][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << HEAD /_ping (996.9μs)\n" [12:32:49.129][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> GET /v1.40/info\n" [12:32:49.140][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << GET /v1.40/info (10.0008ms)\n" [12:32:49.423][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> HEAD /_ping\n" [12:32:49.436][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << HEAD /_ping (13.1305ms)\n" [12:32:49.456][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> GET /v1.40/version\n" [12:32:49.474][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << GET /v1.40/version (17.8667ms)\n" [12:32:49.511][NamedPipeServer ][Info ] app/version() [12:32:49.511][NamedPipeServer ][Info ] app/version done in 00:00:00. [12:32:49.512][NamedPipeServer ][Info ] filesharing/get-protocol() [12:32:49.512][APIRequestLogger ][Info ] [e7f71779] <GoBackendClient start> GET http://localhost/features [12:32:49.513][GoBackendProcess ][Info ] time="2020-03-03T12:32:49+09:00" msg="external: GET /features 200 \"\" \"\"" [12:32:49.517][APIRequestLogger ][Info ] [e7f71779] <GoBackendClient end> GET http://localhost/features -> 200 OK (took 5ms) [12:32:49.517][NamedPipeServer ][Info ] filesharing/get-protocol done in 00:00:00.0051065. [12:32:49.610][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> HEAD /_ping\n" [12:32:49.612][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << HEAD /_ping (1.9974ms)\n" [12:32:49.621][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> GET /v1.40/info\n" [12:32:49.635][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << GET /v1.40/info (13.9948ms)\n" [12:32:49.920][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> HEAD /_ping\n" [12:32:49.922][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << HEAD /_ping (2.0121ms)\n" [12:32:49.932][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy >> GET /v1.40/version\n" [12:32:49.941][ApiProxy ][Info ] time="2020-03-03T12:32:49+09:00" msg="proxy << GET /v1.40/version (8.9985ms)\n" </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1989
(왼쪽의 숫자를 입력해야 합니다.)