Dockerfile does not work on Azure but works on local machine
The problem I am having is that when I open a bash shell in the container my app is not there (the app folder does not exist).
Exact same Dockerfile works fine on my local machine as specified below.
Generally, I've followed instructions from this link - [https://www.perplexity.ai/search/how-to-write-a-dockerfile-and-ov8Boi2fQdaFJfKI6NAD0g].
I have carefully followed all the steps on this link [https://www.perplexity.ai/search/how-to-give-an-azure-web-servi-OfrBuhWUQlyGf98hdSMI5Q].
From App Service -> Identity -> Azure role assignments I see AcrPull and AcrPush with Resource name being my container repo.
Two steps I am unable to follow are:
Under "General settings", set "Stack settings" to "Docker"
Specify your container image: yourregistry.azurecr.io/your-image:tag
Under "Stack settings" my web app does not allow changing any setting to docker. However, it shows the startup command which is correctly set from my .yml
file to docker myapp.dll
.
Also in Overview -> Properties I see Publishing Model as "Container" and Container Image is correctly set to myRepo.azurecr.io/myapp:2284
.
Dockerfile and azure-pipelines.yml are shown below. This Dockerfile works just fine on my local machine when I run these two docker commands:
docker build -t myApp .
docker run -it --rm -p 8080:8080 --name myApp-container myApp
When I run a bash shell in the container on my local machine I see the app folder and my app is there. On Azure the app folder does not exist.
Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 4430
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["myApp.csproj", "./"]
RUN dotnet restore "myApp.csproj"
COPY . .
RUN dotnet build "myApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "myApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myApp.dll"]
azure-pipeline.yml:
# Docker
# Build and push an image to Azure Container Registry
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
trigger:
- master
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
azureSubscription: 'All Azure Services'
appName: 'myApp'
dockerRegistryServiceConnection: '12345'
imageRepository: 'pipelinesdotnetcoredocker'
containerRegistry: 'myRepo.azurecr.io'
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
latest
# - stage: Deploy
# displayName: Deploy stage
# dependsOn: Build
# jobs:
# - deployment: Deploy
# displayName: Deploy job
# pool:
# vmImage: 'ubuntu-latest'
# environment: 'production'
# strategy:
# runOnce:
# deploy:
# steps:
- task: AzureWebAppContainer@1
displayName: 'Azure Web App on Container Deploy'
inputs:
azureSubscription: $(azureSubscription)
appName: $(appName)
containers: $(containerRegistry)/$(imageRepository):$(tag)
containerCommand: 'dotnet myApp.dll'