microsoft / dotnet-framework-docker

The repo for the official docker images for .NET Framework on Windows Server Core.
https://hub.docker.com/_/microsoft-dotnet-framework
MIT License
710 stars 335 forks source link

How to install Visual C++ 2015 Redistributable to this image? #15

Closed andreymir closed 7 years ago

andreymir commented 7 years ago

I have an ASP.NET application that requires native libraries to run. How could I install Microsoft Visual C++ 2015 Redistributable into this image?

shirhatti commented 7 years ago

~This should do the trick~ See updated suggestion.

~FROM microsoft/dotnet-framework:4.6.2~

~ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe /vc_redist.x64.exe~ ~RUN C:\vc_redist.x64.exe /quiet /install~

~# Rest of your Dockerfile~

andreymir commented 7 years ago

Thanks!

nkamatam commented 5 years ago

RUN C:\vc_redist.x64.exe /quiet /install - does not work for me. I ran it from the cmd prompt from within the container, I just get the prompt back immediately without any work/install getting done.

mlapaglia commented 5 years ago

@nkamatam you'll need to put that command into your dockerfile, not run manually from your command line.

VikasAgarwal1984 commented 5 years ago

@mlapaglia It work for me when i put in docker file, but it does not work when i try to install it from container. Is there any reason to it? As i was trying to run helloworld exe but it is still not printing to console after above installation as well. I verified in registry also.

S93rastogi commented 5 years ago

Is the installation of VC runtime does not work with "mcr.microsoft.com/dotnet/core/aspnet:2.1" base image which is basically of ASP.NET CORE. If I try the dotnet framework base image VC runtime gets installed. Is the reason on mentioned here https://social.msdn.microsoft.com/Forums/aspnet/en-US/67425dcd-6812-4b52-81a8-f85c0e4e7d59/error-3221225781-when-running-existing-applications-in-docker?forum=windowscontainers

Escoto commented 4 years ago

This should do the trick

FROM microsoft/dotnet-framework:4.6.2

ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe /vc_redist.x64.exe
RUN C:\vc_redist.x64.exe /quiet /install

# Rest of your Dockerfile

Hi, I am having issues with this solution, I am getting this error, can i get some help? container eec... encountered an error during hcsshim::System::CreateProcess: failure in a Windows system call: The user name or password is incorrect. (0x52e)

MichaelSimons commented 4 years ago

@Escoto, That error seems orthogonal to your Dockerfile and is a general Windows Docker issue. The username or password part is interesting. I would suggest posting this on the windows containers forum.

MichaelSimons commented 4 years ago

I have a refined suggestion that follows the Dockerfile best practices. The previous suggestion is not optimal from a layer perspective.

# escape=`

#  Change the base image as appropriate for your scenario.
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8

USER ContainerAdministrator
RUN curl -fSLo vc_redist.x64.exe https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe `
    && start /w vc_redist.x64.exe /install /quiet /norestart `
    && del vc_redist.x64.exe
BranigansLaw commented 3 years ago

I have a refined suggestion that follows the Dockerfile best practices. The previous suggestion is not optimal from a layer perspective.

# escape=`

#  Change the base image as appropriate for your scenario.
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8

USER ContainerAdministrator
RUN curl -fSLo vc_redist.x64.exe https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe `
    && start /w vc_redist.x64.exe /install /quiet /norestart `
    && del vc_redist.x64.exe

I'm fairly new to Dockerfiles, but the following gave me an error:

The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; curl -fSLo vc_redist.x86.exe https://aka.ms/vs/16/release/vc_redist.x86.exe     && start /w vc_redist.x86.exe /install /quiet /norestart     && del vc_redist.x86.exe' returned a non-zero code: 1

I switched it out for @MichaelSimons's solution and that works much better.

wilbit commented 3 years ago

I have a refined suggestion that follows the Dockerfile best practices. The previous suggestion is not optimal from a layer perspective.

# escape=`

#  Change the base image as appropriate for your scenario.
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8

USER ContainerAdministrator
RUN curl -fSLo vc_redist.x64.exe https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe `
    && start /w vc_redist.x64.exe /install /quiet /norestart `
    && del vc_redist.x64.exe

Does not work to me. I get Access Denied error on start /w vc_redist.x64.exe /install /quiet /norestart command The first suggestion does the trick!

mmikkola commented 2 years ago

I'm using the following:

# escape=`
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; `
    Invoke-WebRequest "https://aka.ms/vs/17/release/vc_redist.x64.exe" -OutFile "vc_redist.x64.exe"; `
    Start-Process -filepath C:\vc_redist.x64.exe -ArgumentList "/install", "/passive", "/norestart" -Passthru | Wait-Process; `
    Remove-Item -Force vc_redist.x64.exe;

It works for me and should be more in line with the Best practices.

akozyreva commented 2 years ago

Hi everyone! Thanks a lot for your help! Bellow is my part which works great!

# Visual C++ 2015 Multithreaded Runtime DLLs (vcruntime140.dll)
RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
    Invoke-WebRequest "https://aka.ms/vs/17/release/vc_redist.x64.exe" -OutFile "vc_redist.x64.exe"; \
    Start-Process -filepath C:\vc_redist.x64.exe -ArgumentList "/install", "/passive", "/norestart" -Passthru | Wait-Process; \
    Remove-Item -Force vc_redist.x64.exe;

# Visual C++ 2013 Multithreaded Runtime DLLs (msvcp120.dll and msvcr120.dll)
RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
    Invoke-WebRequest "https://aka.ms/highdpimfc2013x64enu" -OutFile "vc_redist.x64.exe"; \
    Start-Process -filepath C:\vc_redist.x64.exe -ArgumentList "/install", "/passive", "/norestart" -Passthru | Wait-Process; \
    Remove-Item -Force vc_redist.x64.exe;   
abaghum commented 1 year ago

None of these work

nkamatam commented 1 year ago

Using docker on Windows is by far the worst idea I invested my time on.

On Fri, 24 Mar, 2023, 4:17 am abaghum, @.***> wrote:

None of these work

— Reply to this email directly, view it on GitHub https://github.com/microsoft/dotnet-framework-docker/issues/15#issuecomment-1482010847, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFBDGBZSGTNQVKBOPVJJM6LW5THG3ANCNFSM4DH2GYQQ . You are receiving this because you were mentioned.Message ID: @.***>

vinothprasathCS commented 1 year ago

Hi All, I am using Podman instead of Docker.. Can i use C++ Redistributable in podman container since its linux based..?

mthalman commented 1 year ago

Hi All, I am using Podman instead of Docker.. Can i use C++ Redistributable in podman container since its linux based..?

What is your scenario for using this in the context of Linux?

engarde commented 1 year ago

Podman will support your use of wsl(2) based linux images on a Windows host but not a lot of call for visual c runtime in that case.

Jens-G commented 1 year ago

This does not work if the image is Nano Server 64 based, because the installer is a 32 bit app and immediately terminates with exit code 3221225781 on that system.

SCLDGit commented 11 months ago

What would need to be done to the dotnet/sdk or dotnet/aspnet base images to get this working correctly? Our application leverages sqlcipher, which won't run without the redist. I can get it running on windows:ltsc2019, but the image size is enormous.

MichaelSimons commented 11 months ago

@SCLDGit - Have you tried this suggestion?

SCLDGit commented 11 months ago

@SCLDGit - Have you tried this suggestion?

Yep. After giving it some more thought I'm thinking it's because the dotnet sdk and aspnet images are meant to run cross platform on both wsl and hyper-v containers, which vcredist is obviously a Windows only package.

MichaelSimons commented 11 months ago

@SCLDGit - Have you tried this suggestion?

Yep. After giving it some more thought I'm thinking it's because the dotnet sdk and aspnet images are meant to run cross platform on both wsl and hyper-v containers, which vcredist is obviously a Windows only package.

I missed that you were asking about the .NET (Core) images and the not .NET Framework images. You should be able to install redist on the .NET Windows Server Core images. As you noted it won't work with the Linux images and it also won't work on the Nano Server images.