jakeswenson / BitBetter

Modify bit warden to provide my own licensing for self hosting
510 stars 115 forks source link

Problem since the last update #75

Closed ghost closed 4 years ago

ghost commented 4 years ago

I updated my instance with the bitbetter update script. Since the update i get the error message "an unhandled server error has occurred" or "an unexpected error has occurred" when i try to login.

Api Log

2020-09-18 00:00:00.007 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 00:00:00.
2020-09-18 00:00:00.014 +00:00 [Information] It's alive!
2020-09-18 00:00:00.014 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 00:00:00.
2020-09-18 00:00:00.208 +00:00 [Information] Validating premium for 0 users.
2020-09-18 00:00:00.208 +00:00 [Information] Finished job "ValidateUsersJob" at 09/18/2020 00:00:00.
2020-09-18 00:30:00.007 +00:00 [Information] Starting job "ValidateOrganizationsJob" at 09/18/2020 00:30:00.
2020-09-18 00:30:00.165 +00:00 [Information] Validating licenses for 1 organizations.
2020-09-18 00:30:00.264 +00:00 [Information] Organization 04e60056-b44a-48fd-a0b1-ac13008ccbe0 ("CENSORED") has an invalid license and is being disabled. Reason: "Invalid signature."
2020-09-18 00:30:01.347 +00:00 [Error] Error performing "ValidateOrganizationsJob".
MailKit.Net.Smtp.SmtpCommandException: 5.1.3 Invalid address
   at MailKit.Net.Smtp.SmtpClient.OnRecipientNotAccepted(MimeMessage message, MailboxAddress mailbox, SmtpResponse response)
   at MailKit.Net.Smtp.SmtpClient.ProcessRcptToResponse(MimeMessage message, MailboxAddress mailbox, SmtpResponse response)
   at MailKit.Net.Smtp.SmtpClient.FlushCommandQueueAsync(MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, CancellationToken cancellationToken)
   at MailKit.Net.Smtp.SmtpClient.SendAsync(FormatOptions options, MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, CancellationToken cancellationToken, ITransferProgress progress)
   at MailKit.Net.Smtp.SmtpClient.SendAsync(FormatOptions options, MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, CancellationToken cancellationToken, ITransferProgress progress)
   at Bit.Core.Services.MailKitSmtpMailDeliveryService.SendEmailAsync(MailMessage message) in /home/runner/work/server/server/src/Core/Services/Implementations/MailKitSmtpMailDeliveryService.cs:line 92
   at Bit.Core.Services.HandlebarsMailService.SendLicenseExpiredAsync(IEnumerable`1 emails, String organizationName) in /home/runner/work/server/server/src/Core/Services/Implementations/HandlebarsMailService.cs:line 291
   at Bit.Core.Services.LicensingService.DisableOrganizationAsync(Organization org, ILicense license, String reason) in /home/runner/work/server/server/src/Core/Services/Implementations/LicensingService.cs:line 131
   at Bit.Core.Services.LicensingService.ValidateOrganizationsAsync() in /home/runner/work/server/server/src/Core/Services/Implementations/LicensingService.cs:line 91
   at Bit.Api.Jobs.ValidateOrganizationsJob.ExecuteJobAsync(IJobExecutionContext context) in /home/runner/work/server/server/src/Api/Jobs/ValidateOrganizationsJob.cs:line 24
   at Bit.Core.Jobs.BaseJob.Execute(IJobExecutionContext context) in /home/runner/work/server/server/src/Core/Jobs/BaseJob.cs:line 21
2020-09-18 00:30:01.350 +00:00 [Information] Finished job "ValidateOrganizationsJob" at 09/18/2020 00:30:01.
2020-09-18 01:00:00.003 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 01:00:00.
2020-09-18 01:00:00.005 +00:00 [Information] It's alive!
2020-09-18 01:00:00.006 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 01:00:00.
2020-09-18 02:00:00.006 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 02:00:00.
2020-09-18 02:00:00.009 +00:00 [Information] It's alive!
2020-09-18 02:00:00.010 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 02:00:00.
2020-09-18 03:00:00.004 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 03:00:00.
2020-09-18 03:00:00.004 +00:00 [Information] It's alive!
2020-09-18 03:00:00.004 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 03:00:00.
2020-09-18 04:00:00.002 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 04:00:00.
2020-09-18 04:00:00.003 +00:00 [Information] It's alive!
2020-09-18 04:00:00.004 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 04:00:00.
2020-09-18 05:00:00.001 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 05:00:00.
2020-09-18 05:00:00.002 +00:00 [Information] It's alive!
2020-09-18 05:00:00.004 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 05:00:00.
2020-09-18 06:00:00.002 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 06:00:00.
2020-09-18 06:00:00.002 +00:00 [Information] It's alive!
2020-09-18 06:00:00.002 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 06:00:00.
2020-09-18 06:00:00.003 +00:00 [Information] Starting job "ValidateUsersJob" at 09/18/2020 06:00:00.
2020-09-18 06:00:00.219 +00:00 [Information] Validating premium for 0 users.
2020-09-18 06:00:00.219 +00:00 [Information] Finished job "ValidateUsersJob" at 09/18/2020 06:00:00.
2020-09-18 07:00:00.001 +00:00 [Information] Starting job "AliveJob" at 09/18/2020 07:00:00.
2020-09-18 07:00:00.001 +00:00 [Information] It's alive!
2020-09-18 07:00:00.001 +00:00 [Information] Finished job "AliveJob" at 09/18/2020 07:00:00.
2020-09-18 07:52:21.315 +00:00 [Information] Api started.
2020-09-18 07:52:22.960 +00:00 [Error] A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - Unknown error 487279232)
System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - Unknown error 487279232)
 ---> System.ComponentModel.Win32Exception (487279232): Unknown error 487279232
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.WaitForPendingOpen()
--- End of stack trace from previous location where exception was thrown ---
   at Dapper.SqlMapper.QueryAsync[T](IDbConnection cnn, Type effectiveType, CommandDefinition command) in /_/Dapper/SqlMapper.Async.cs:line 419
   at Bit.Core.Repositories.SqlServer.UserRepository.GetKdfInformationByEmailAsync(String email)
   at Bit.Api.Controllers.AccountsController.PostPrelogin(PreloginRequestModel model) in /home/runner/work/server/server/src/Api/Controllers/AccountsController.cs:line 55
   at lambda_method(Closure , Object )
   at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult()
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
ClientConnectionId:d5c16d0b-bc55-446f-a543-3b1f703aac2b
Error Number:487279232,State:0,Class:20

That's just the identity log

2020-09-18 07:52:20.794 +00:00 [Information] Identity started.
captainhook commented 4 years ago

Have you tried rebuilding Bitbetter? What do you see when you run 'docker ps'?

ghost commented 4 years ago

yeah, multiple times. This is the docker ps output

5ae0d9ea1d74        bitwarden/portal:1.37.1          "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-portal
c4a81af5f6dc        bitwarden/admin:1.37.1           "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-admin
ac0c0bb2b977        bitbetter/api:latest             "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-api
7600617845eb        bitwarden/notifications:1.37.1   "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-notifications
b91f44d61e42        bitwarden/web:2.16.1             "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)                                                         bitwarden-web
32e9d832adc9        bitwarden/icons:1.37.1           "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-icons
78a596c6c81a        bitwarden/attachments:1.37.1     "/entrypoint.sh"    33 minutes ago      Up 33 minutes (healthy)                                                         bitwarden-attachments
8529ce51d114        bitwarden/sso:1.37.1             "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-sso
1726a564bf4f        bitbetter/identity:latest        "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-identity
bcee53788a48        bitwarden/events:1.37.1          "/entrypoint.sh"    33 minutes ago      Up 32 minutes (healthy)   5000/tcp                                              bitwarden-events
d5010fa70ddc        bitwarden/mssql:1.37.1           "/entrypoint.sh"    33 minutes ago      Up 33 minutes (healthy)                                                         bitwarden-mssql
ghost commented 4 years ago

I forgot to mention, that when I use the original api and identity containers, I can login again.

captainhook commented 4 years ago

I have not tested against 1.37.1, I'll give it a try after work. In the meantime I can just suggest pulling everything again and rebuilding just to be safe.

  1. Backup your keys (BitBetter/.keys/)
  2. Stop and remove all containers
  3. Delete BitBetter directory and pull it fresh from Github
  4. Restore your keys and rebuild BitBetter containers/licensegen/
ghost commented 4 years ago

That did the thing, it's working now. Sorry for the inconvenience.

Ayitaka commented 4 years ago

@captainhook For what its worth, when I ran the update script it did not create bitbetter/api:1.37.1 or bitbetter/identity:1.37.1, only bitbetter/api:latest and bitbetter/identity:latest (as you can see, as well, from the docker ps output in OPs post above). When I ran ./build.sh by hand it created the two other tags and it all worked fine after that. I did not delete, change, or pull BitBetter before running ./build.sh by hand.

captainhook commented 4 years ago

I recall seeing similar behaviour... @h44z are you able to run the update script and have the containers relaunch with no issue?

Update script was introduce in #69 and it was working fine back then for sure.

h44z commented 4 years ago

The update script does create tags for bitbetter/api:1.37.1 and bitbetter/identity:1.37.1 (as well as :latest tags). But somehow after running the bitwarde.sh update command, the 1.37.1 tags get removed. It seems to be related to the dockerPrune() function in bitwarden's run.sh script, but I have to investigate further...

h44z commented 4 years ago

Can someone test and confirm that the commit in https://github.com/h44z/BitBetter/tree/fix-update fixes the issue?

captainhook commented 4 years ago

I see the following when running update script:

Status: Downloaded newer image for bitwarden/sso:1.37.1
Pulling api (bitbetter/api:1.37.1)...
ERROR: 404 Client Error: Not Found ("pull access denied for bitbetter/api, repository does not exist or may require 'docker login': denied: requested access to the resource is denied")
Pulling portal (bitwarden/portal:1.37.1)...
1.37.1: Pulling from bitwarden/portal
d121f8d1c412: Already exists
7b2d5a029506: Already exists
778ad5bbc2d1: Already exists
6de7a0eb2598: Already exists
6d9bf7184ec4: Already exists
fe1cd80bc909: Already exists
5e4c794f0c07: Already exists
0a9a3efef397: Pull complete
a55c5eef9428: Pull complete
dacf5d34fbd1: Pull complete
Digest: sha256:75909a86718233d3d2d805f37877a1e8a6f4961f7590767f86bc1c1e6944bc15
Status: Downloaded newer image for bitwarden/portal:1.37.1
Pulling events (bitwarden/events:1.37.1)...
1.37.1: Pulling from bitwarden/events
d121f8d1c412: Already exists
7b2d5a029506: Already exists
778ad5bbc2d1: Already exists
6de7a0eb2598: Already exists
6d9bf7184ec4: Already exists
fe1cd80bc909: Already exists
5e4c794f0c07: Already exists
f1d2a5454052: Pull complete
040e74929ecc: Pull complete
3b9400b3d989: Pull complete
Digest: sha256:e397442a9d15dc65fa2589f6607bb6e969dc1ff6a0576fe5147bf6a919b8b1c0
Status: Downloaded newer image for bitwarden/events:1.37.1
Pulling identity (bitbetter/identity:1.37.1)...
ERROR: 404 Client Error: Not Found ("pull access denied for bitbetter/identity, repository does not exist or may require 'docker login': denied: requested access to the resource is denied")
Pulling nginx (bitwarden/nginx:1.37.1)...
1.37.1: Pulling from bitwarden/nginx

However it appears to work:

#####:~/BitBetter$ docker ps
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS                   PORTS                                                 NAMES
cb72cd7a66eb        bitwarden/nginx:1.37.1           "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   80/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   bitwarden-nginx
3a8c76ebd357        bitwarden/admin:1.37.1           "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-admin
bca78e6c440c        bitwarden/portal:1.37.1          "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-portal
426bcd1f48c7        bitbetter/identity:1.37.1        "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-identity
8b434a920113        bitwarden/notifications:1.37.1   "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-notifications
c66df1c0d96c        bitwarden/events:1.37.1          "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-events
4d45802c1a9e        bitwarden/sso:1.37.1             "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-sso
533d019efb12        bitbetter/api:1.37.1             "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-api
19f820e27b37        bitwarden/mssql:1.37.1           "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)                                                         bitwarden-mssql
43fa7d4f428c        bitwarden/icons:1.37.1           "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)   5000/tcp                                              bitwarden-icons
994bd0c60960        bitwarden/attachments:1.37.1     "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)                                                         bitwarden-attachments
cf248940d5d2        bitwarden/web:2.16.1             "/entrypoint.sh"    2 minutes ago       Up 2 minutes (healthy)                                                         bitwarden-web
Ayitaka commented 4 years ago

Tested a few times. Using the fix-update branch with the new labels for the images in build.sh and using the script to upgrade from 1.36.1 to 1.37.1 worked without unexpected errors (had the usual pull errors). Thanks h44z!

Side-note: The 1.36.1 bitbetter/identity and bitbetter/api images remained (see '1.37.1 docker images' below). Since docker image prune doesn't remove them and docker image prune -a removes the 1.37.1 tagged ones too, causing restarts to fail, what is the recommended way to cleanly remove the old images without doing it manually?

Edit: This is what I came up with to remove all bitbetter images that are not tagged with current BW_VERSION or 'latest'... Edit2: Gives an error when running docker rmi without any ids, so added check to ensure there are some ids before running docker rmi.

BW_VERSION="$(curl --silent https://raw.githubusercontent.com/bitwarden/server/master/scripts/bitwarden.sh | grep 'COREVERSION="' | sed 's/^[^"]*"//; s/".*//')"

ids=$( docker images bitbetter/* | grep -E -v -- "CREATED|latest|${BW_VERSION}" | awk '{ print $3 }' )
if [ -n "$ids" ]; then
  docker rmi $ids
fi

/Edit

1.36.1 docker ps

``` # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf479646acb7 bitwarden/nginx:1.36.1 "/entrypoint.sh" 11 seconds ago Up 10 seconds (health: starting) 80/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp bitwarden-nginx 98f17503811f bitwarden/admin:1.36.1 "/entrypoint.sh" 12 seconds ago Up 11 seconds (health: starting) 5000/tcp bitwarden-admin 5f5970c6a864 bitwarden/events:1.36.1 "/entrypoint.sh" 13 seconds ago Up 11 seconds (health: starting) 5000/tcp bitwarden-events a7392c611e78 bitwarden/notifications:1.36.1 "/entrypoint.sh" 13 seconds ago Up 11 seconds (health: starting) 5000/tcp bitwarden-notifications b964b810b246 bitwarden/web:2.15.1 "/entrypoint.sh" 13 seconds ago Up 12 seconds (health: starting) bitwarden-web f274e1d25917 bitwarden/icons:1.36.1 "/entrypoint.sh" 13 seconds ago Up 11 seconds (health: starting) 5000/tcp bitwarden-icons 11d2a9c49475 bitwarden/mssql:1.36.1 "/entrypoint.sh" 13 seconds ago Up 12 seconds (health: starting) bitwarden-mssql 759153c34f92 bitbetter/identity "/entrypoint.sh" 13 seconds ago Up 11 seconds (health: starting) 5000/tcp bitwarden-identity a3111c79f5f5 bitwarden/attachments:1.36.1 "/entrypoint.sh" 13 seconds ago Up 12 seconds (health: starting) bitwarden-attachments 642601904e92 bitbetter/api "/entrypoint.sh" 13 seconds ago Up 12 seconds (health: starting) 5000/tcp bitwarden-api ```

1.37.1 docker ps

``` # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d01c16fb05ab bitwarden/nginx:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 80/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp bitwarden-nginx dfb8247d5e17 bitwarden/portal:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-portal be9cc1323979 bitwarden/admin:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-admin b4985f1f0d10 bitwarden/web:2.16.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) bitwarden-web d0887d77d49b bitwarden/icons:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-icons 9255c0a315fd bitbetter/identity:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-identity f8ca4189f5e5 bitwarden/sso:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-sso 14126baf4605 bitbetter/api:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-api 97c2d3ee396f bitwarden/mssql:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) bitwarden-mssql 12241eabe428 bitwarden/attachments:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) bitwarden-attachments f13c8150e602 bitwarden/events:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-events 083a7adfdaaa bitwarden/notifications:1.37.1 "/entrypoint.sh" About a minute ago Up About a minute (healthy) 5000/tcp bitwarden-notifications ```

1.37.1 docker images

``` # docker images REPOSITORY TAG IMAGE ID CREATED SIZE bitbetter/identity 1.37.1 cfcfe05fc0a0 About a minute ago 374MB bitbetter/identity latest cfcfe05fc0a0 About a minute ago 374MB bitbetter/api 1.37.1 e53b4c1fd203 About a minute ago 377MB bitbetter/api latest e53b4c1fd203 About a minute ago 377MB 4a3e9dd99fd5 2 minutes ago 377MB bitbetter/identity 1.36.1 22d7acf4255e 5 minutes ago 374MB bitbetter/api 1.36.1 fa101087b4fd 5 minutes ago 377MB bitwarden/web 2.16.1 1859f01cf80f 2 days ago 223MB bitwarden/setup 1.37.1 1f57fc9c670e 3 days ago 279MB bitwarden/mssql 1.37.1 87ec220cd083 3 days ago 1.4GB bitwarden/portal 1.37.1 f0c49302fc8d 3 days ago 283MB bitwarden/sso 1.37.1 29f9e601846a 3 days ago 283MB bitwarden/admin 1.37.1 b05571d6dbb7 3 days ago 297MB bitwarden/events 1.37.1 235a073cc9e6 3 days ago 278MB bitwarden/notifications 1.37.1 328640ee5809 3 days ago 279MB bitwarden/icons 1.37.1 32fe71b55d16 3 days ago 279MB bitwarden/attachments 1.37.1 c9e4545e55b5 3 days ago 210MB bitwarden/nginx 1.37.1 bdef05a840b2 3 days ago 133MB mcr.microsoft.com/dotnet/core/sdk 3.1 c4155a9104a8 9 days ago 708MB certbot/certbot latest e294c78fd17c 10 days ago 92.1MB bitwarden/setup 1.36.1 0c4bc3b255da 7 weeks ago 278MB ```

captainhook commented 4 years ago

Fixed in #77, thanks @h44z and others for your contribution.