Search code examples
windowspowershelldockerchocolateypowershell-cmdlet

Not able to install packages using chcolatey in docker container


I am building a windows container with following software installed

  1. Notepad++
  2. MariaDB
  3. HeidiSQL
  4. .NET Framework 2.0 and 3.5

This is the docker image I created. https://hub.docker.com/repository/docker/mhhaji/winserver2016_base

What I tried :

Steps to run the container

docker run --name mycontainer mhhaji/winserver2016_base:v1 ping -t localhost

docker exec -it mycontainer powershell

Once powershell is running, I execute the following commands

Get-PackageProvider
#Chocolatey is not existing so I install chocolatey
Find-Package -Provider chocolatey
#Enter [Y] when prompted
#Install notepad++
Find-Package -Provider chocolatey -name notepad*

I get the following error

PS C:\> Find-Package -Provider chocolatey -name notepad* 
WARNING: NuGet: The request was aborted: Could not create SSL/TLS secure channel. 

PS C:\> Find-Package -Provider chocolatey -name mariadb 
Find-Package : No match was found for the specified search criteria and package name 'mariadb' as registered package sources. 
At line:1 char:1 
+ Find-Package -Provider chocolatey -name mariadb 
    + Categorylnfo : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPac
    + FullyQualifiedErrorld : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManage 

PS C:\> Get-PackageSource 
Name          ProviderName    IsTrusted    Location   
chocolatey    Chocolatey      False        http://chocolatey.org/api/v
PSGallery     PowerShellGet   False        https://www.powershellgalle   


PS C:\> Get-PackageParameters
Get-PackageParameters : The term 'Get-PackageParameters' is not recognized as the name 
o program. Check the spelling of the name, or if a path was included, verify that the path 
At line:1 char:1 
+ Get-PackageParameters 
    + Categorylnfo : ObjectNotFound: (Get-PackageParameters:String) [], Command 
    + FullyQualifiedErrorld : CommandNotFoundException 

PS C:\> Get-PackageProvider 
Name           Version         DynamicOptions 
Chocolatey     2.8.5.130       SkipDependencies, ContinueOnFailure, 
ExcludeVersion,ForceX86, PackageSaveMode, FilterOnTag, Contains, 
AllowPrereleaseVersions, Conf  
msi            3.0.0.0         AdditionalArguments  
msu            3.0.0.0 
PowerShellGet  1.0.0.1         PackageManagementProvider, Type, Scope, AllowClobber,SkipPublisherCheck, InstallUpdate, NoPathUpdate, Filter, Tag, Includes, DscRes
Programs       3.0.0.0         IncludeWindowsInstaller, IncludeSystemComponent

I was able to download chocolatey so connecting to external endpoints doesnt seem to be a problem.

Update: Seems like nuget is not installed in my image. Looking for solution but not able to find.


Solution

  • Make sure your system is able to support TLS 1.2 as that is necessary for chocolatey to run

    PS> [Enum]::GetNames([Net.SecurityProtocolType]) -contains 'Tls12'

    Enable TLS 1.2 for your system

    PS> [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12

    Finally install chocolatey directly from source

    PS> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));