我正在创建一个我试图容器化的Webform应用程序。 我使用VS2017,创建默认的webform应用程序,并添加docker支持。
如果我F5该应用程序,它正在工作(希望)
“添加泊坞窗支持”会添加许多文件:
1)一个Dockerfile,带
version: '3'
services:
legacywebapp:
image: legacywebapp
build:
context: .\LegacyWebApp
dockerfile: Dockerfile
我理解它基于aspnet:4.6.2图像,并且它从obj / docker / publish复制文件以将它们放入容器中。
我的问题是我没有在此目录上发布文件。当然,如果我建立了docker,我有一个错误(它无法在obj / docker / publish中找到文件)。请记住,F5正在运行。
但是还有其他文件。
2)Docker-compose.yml:
version: '3'
services:
legacywebapp:
ports:
- "80"
networks:
default:
external:
name: nat
如果我理解的话,它会根据dockerfile创建一个legacywebapp服务。那个没有用的,仍然没有“obj / docker / publish”
3)docker-compose.override.yml with:
docker-compose -f .\docker-compose.yml -f .\docker-compose.override.yml build
好吧,我认为它暴露了端口80(为什么不在第一个文件中?但无论如何,对于模块化,我认为它更好。)
如果我尝试
Step 4/4 : COPY ${source:-obj/Docker/publish} .
ERROR: Service 'legacywebapp' failed to build: COPY failed: GetFileAttributesEx \\?\C:\windows\TEMP\docker-builder798755009\obj\Docker\publish: The system cannot find the file specified.
当然我有一个错误:
docker-compose -f "C:\Users\...\docker-compose.yml" -f "C:\Users\...\docker-compose.override.yml" -f "C:\Users\...\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15539612722162891187 up -d --build
为什么我在Visual Studio中使用F5时会有效?让我们看一下VS的构建输出,我可以看到命令行:
version: '3'
services:
legacywebapp:
image: legacywebapp:dev
build:
args:
source: obj/Docker/empty/
volumes:
- C:\Users\...\LegacyWebApp:C:\inetpub\wwwroot
- C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Remote Debugger:C:\remote_debugger:ro
labels:
com.microsoft.visualstudio.debuggee.program: "C:\\app\\bin/LegacyWebApp.dll"
com.microsoft.visualstudio.debuggee.workingdirectory: "C:\\app"
所以,还有另一个文件,我想调试一下:
4)docker-compose.vs.debug.g.yml
// Return object like {"value": 10, "rest": {"value": 20, "rest": null}}
function arrayToList0(arr) {
var entry = {};
// Check if there are any members in arr
if (arr.length) {
// If there are, add the value
entry.value = arr[0];
}
// If there are more entries, add them
if (arr.length > 1) {
// Call recursively without first element
entry.rest = arrayToList(arr.slice(1));
// Otherwise, add null
} else {
entry.rest = null;
}
return entry;
}
console.log(arrayToList([1,2,3]));
再一次,没有obj / docker / publish。什么是obj / Docker / empty /?
如何正确构建图像?例如,如果我想将它发布在私有存储库中......