Saya memiliki aplikasi inti asp.net yang berjalan dengan baik saat Diterbitkan. Saya menyebarkannya ke gambar buruh pelabuhan dengan serangkaian perintah berikut, mengangkat seluruh kain dari panduan MSFT ini.

docker build -t myimage -f Dockerfile .
docker images
docker create myimage
docker run -it -p 5000:80 -d myimage

Inilah Dockerfile yang saya gunakan untuk membuat gambar, btw.

#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. app/
EXPOSE 80 443 5000 5001
ENTRYPOINT ["dotnet", "app/KittenSignalR.dll"]

Saya dapat terhubung ke situs dari browser tetapi hanya file tampilan itu sendiri yang disajikan, dengan JS, gambar, dll tidak dimuat. masukkan deskripsi gambar di sini

1
FoxDeploy 17 Maret 2020, 21:47

1 menjawab

Jawaban Terbaik

Jawaban singkat: direktori kerja Anda adalah /, harus /app.


Saat Anda menyajikan file statis dengan ASP.Net Core, Microsoft mengatakan ini:

Host web aplikasi harus diberi tahu tentang direktori root konten.

Metode WebHost.CreateDefaultBuilder menyetel root konten ke direktori saat ini

Sumber< /a>, penekanan saya.

Melihat Dockerfile Anda, Anda tidak pernah mengubah direktori kerja, sehingga tetap sama dengan gambar dasar yang Anda ambil (gambar aspnet:3.0)1.

Karena direktori kerja Anda adalah /, aplikasi mencari folder wwwroot (pada dasarnya /wwwroot), yang tidak dapat ditemukan. Itulah alasan Anda mendapatkan 404 pada semua aset wwwroot Anda.

Untuk memperbaikinya, cukup ubah direktori kerja image Docker dan perbarui titik masuk untuk menggunakan jalur relatif dari WD itu.

#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. app/
EXPOSE 80 443 5000 5001
WORKDIR app
ENTRYPOINT ["dotnet", "KittenSignalR.dll"]

1 Perlu dikemukakan bahwa Anda menyalin file ke, dan menyetel direktori kerja ke, app. Itu adalah jalur direktori relatif, dan saya SANGAT menyarankan Anda menjadikannya absolut (/app).

Saya berasumsi bahwa gambar aspnet:3.0 memiliki direktori kerja default /, tetapi saya tidak yakin.

Membiarkannya relatif berarti Anda mendasarkan struktur folder Anda dari direktori kerja default gambar dasar. Itu bisa menjadi root, atau mungkin tidak. Lebih baik membuat absolut (pun intended) pasti dan menjadikannya jalur absolut.

#Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
COPY /bin/Release/netcoreapp3.0/publish/. /app/
EXPOSE 80 443 5000 5001
WORKDIR /app
ENTRYPOINT ["dotnet", "KittenSignalR.dll"]
1
gunr2171 17 Maret 2020, 19:47