Mssql-docker: Missing `latest` tag on Docker Hub. Broken build

Created on 2 Oct 2017  路  21Comments  路  Source: microsoft/mssql-docker

Our CI builds started failing with this error:

Unable to find image 'microsoft/mssql-server-linux:latest' locally
docker: Error response from daemon: manifest for microsoft/mssql-server-linux:latest not found.

Looks like the last update to the image on Docker Hub has removed the latest tag?
https://hub.docker.com/r/microsoft/mssql-server-linux/tags/

Most helpful comment

:latest tag is BACK!

Based on community feedback, we have decided to add the :latest tag back to our repo on Docker Hub. There are now 3 tags that you can use.

  • :2017-GA should be used if you explicitly want to stay on the GA version of SQL Server 2017.
  • :2017-latest should be used if you want the latest updated cumulative version of SQL Server 2017.
  • :latest should be used if you want the latest updated cumulative version of the most recent GA version of SQL Server. Using this will also bump you to the next major version (when it's available).

Thanks for all of your feedback!

Jeff, Microsoft

All 21 comments

It's now 2017-latest

Is 2017-latest default tag? coz :latest gets applied by default to any docker image and we just lost the _by default_ tag for this docker image.

@cheenamalhotra exactly -- the recommended way to get the latest image is now broken, not to mention latest tag is the idiomatic way in Docker.

docker pull microsoft/mssql-server-linux

This command will no longer work at all. It's a breaking change.

On recommendation from Docker we've not used the 'latest' tag on the images. Apparently nonchalant use of :latest has caused some problems. People will unintentionally upgrade from one version to another by just pulling latest. To help people do the "right thing" we will have a :<version>-latest tag, i.e. 2017-latest. You can pull that and always get the latest cumulative update (CU) on the 2017 version. You can also pull :2017-GA if you want to have the GA image specifically. With each CU that we release we will tag it with 2017-latest and 2017-CU# (e.g. 2017-CU1). When we get to the next version of SQL Server we will tag it as :20##-GA and so on.

Sorry for the breaking change. We're open to feedback on this so if you don't like it or have some other ideas, please let us know here. We'll keep this item open for discussion for awhile and see how it goes.

Apparently nonchalant use of :latest has caused some problems. People will unintentionally upgrade from one version to another by just pulling latest.

@twright-msft : My suggestion would be to maintain a :latest tag that is the most current release. For anyone who wants to test the newest version or use it in development. Folks who are new to Docker will need to get used to the idea that using :latest may break backward compat.

Alternately, and better still, it would be great if MSFT could automatically upgrade any persisted databases to the latest version on container start. :)

I agree with above. We now have broken builds due to the removal of the default tag. Please let people use microsoft/mssql-server-linux if they really want the latest available release.

Apparently nonchalant use of :latest has caused some problems. People will unintentionally upgrade from one version to another by just pulling latest.

I agree with above. Removing the default tag for a repository should not even be considered. You should tag every release (even if it means creating multiple tags for the same release) - see https://hub.docker.com/r/microsoft/dotnet. Those who need to stay on a specific version should be using tags anyways.

@sjdweb , @cheenamalhotra , @jclausen , @esetnik , @arleyschrock

We've heard your feedback and we're considering adding the :latest tag back to Docker Hub since SQL Server here is meant for Development only. We wouldn't add it to Docker Store where a customer can get an edition of SQL Server for a production environment, due to the issues @twright-msft mentioned earlier.

We've heard from a handful of people so far. We'd like to hear from a larger sample whether this will work for you (adding :latest to Hub). Let us know!

-Jeff, Microsoft

I'd like to add my voice to the crowd. In Dockerland, :latest is the convention. It's widely known (or if you're new, rapidly apparent) that this is not recommended, unless the feed you're pulling from provides assurances of transparent upgrades.

Perhaps it's not the "right" way, but it's unconventional, and quite a surprise for many people I'm sure.

Just to add my 1p contribution, first of all I would be interested in the long story for the comment

Apparently nonchalant use of :latest has caused some problems. People will unintentionally upgrade from one version to another by just pulling latest.

As multiple people have suggested above the only strategy that makes sense it to have the :latest tag back. I would also prefer this for production because you want to ensure this version is production solid.
Each company then should implement their own CI integration tests even if for a db at a minimal level. The caused some problems use case is most likely due to lack of integration tests. The suggestion from @tadam-msft in my opinion is not solved by a use of a yearly prefix, unless there is a guarantee that in the same year things will not break, but as previously encouraged a better semantic versioning could be used by releasing more tags (X.Y.Z) where the major version could be used as an alias if you wanted to ensure that your dependencies are locked on that major version.

Not having :latest breaks every single habit we've built over the years (months) with Docker.

Since you've asked for more feedback on the Docker Hub, I'll reiterate: please add the :latest tag back, it will make everyone's life easier.

:hand: Definitely raise my hand in asking to keep the :latest tag.

Conforms to the standard that we're used to while dealing with docker

You can also pull :2017-GA if you want to have the GA image specifically

What does "GA" mean?

What does "GA" mean?

@danguilherme : GA = "General Availability". It signifies the first release of a major version that is available to everyone. CU = "Cumulative Update" refers to a subsequent update release of a major version that contains fixes/updates that are cumulative from the GA release.

Hope that help!

Jeff, Microsoft

You have just broken every single build/test script that gets the latest version including mine, there is a reason why specific versions and latest exist side by side! It's nice you want to have developers specify which version and "help them", but is this really needed for most people who use this image for testing/local development purposes, do you have any data on this? I cannot believe there are actually people running this image in production?

Until when will this 2017 version be available? You guys just killed the previous version of the image instantly(?) so what is stopping you from doing the same thing with 2017 in a year? If this is the "right thing" to do, apparently instantly abandoning the previous version was also the right thing to do now.

Apparently nonchalant use of :latest has caused some problems. People will unintentionally upgrade from one version to another by just pulling latest.

Thank you for deciding what I should do, I thought adding :latest or nothing to a docker image name is me saying explicitly I always want the latest version. If we would introduce this for all images I would have to regularly check all docker hub pages to see if there is a new version. Yes nonchalant use might introduce a problem, but was there even a versioned version of the image available before?

:latest tag is BACK!

Based on community feedback, we have decided to add the :latest tag back to our repo on Docker Hub. There are now 3 tags that you can use.

  • :2017-GA should be used if you explicitly want to stay on the GA version of SQL Server 2017.
  • :2017-latest should be used if you want the latest updated cumulative version of SQL Server 2017.
  • :latest should be used if you want the latest updated cumulative version of the most recent GA version of SQL Server. Using this will also bump you to the next major version (when it's available).

Thanks for all of your feedback!

Jeff, Microsoft

Thanks @JeffStammler and thanks everybody for the feedback and patience on this! We're still trying to find the right balance between licensing controls and making the software easy to acquire.

Just want to restate this for folks though... If you are using :latest in production and are using a paid edition of SQL Server, please ensure that you have the correct licenses in place when you are pulling the next major release of SQL Server and deploying into production. For example, let's say that you put the current image into production using MSSQL_PID=Standard. That presumes that you have a license for SQL Server 2017 for that container. Now, let's say that we release SQL Server 201x (next major release of SQL Server) and we move the :latest tag forward to that 201x image. When you deploy that into production you need to have a license for 201x. You can either buy a license for 201x or even better if you bought SQL Server 2017 with software assurance then as long as SQL Server 201x comes out within 3 years of your purchase date then you are entitled to 201x.

Hope that makes sense! If you have any licensing questions, please see the updated licensing guide or ask them here.

Thanks!

Thanks @twright-msft @JeffStammler for quick support on providing latest tag again! We are able to fetch docker images as before now.

I hope the documentation gets updated soon on Docker Hub and MSDN.

We are planning to switch our application back to use default "latest" tag, I hope this will be supported for new releases and updated in future as well.

I hope the documentation gets updated soon on Docker Hub and MSDN.

@cheenamalhotra : The documentation on Hub has been updated. The MSDN documentation is still valid - is there something in particular you wanted updated there?

Jeff, Microsoft

Thanks @JeffStammler

For MSDN documentation I was hoping to see latest/no tag used instead of 2017-latest in Step 1 of 'Pull and run the container image' section similar to what's specified on Docker Hub. Also I believe there is no rc1 tag now, maybe that can be changed to some other valid tag in Note block just to avoid any confusion for a first time user.

And in Step 2 where docker run command is mentioned, and in the parameter listing of docker run command, I feel it would be appropriate to use mssql-server-linux:> instead of explicit mention of 2017-latest tagname as it should ideally be the same tag that was used in docker pull command.

I feel MSDN documentation could be more generic than to use 2017-latest explicitly since there would be 201x-latest versions in future and MSDN documentation may again be needing an update, but I leave it upto you for making best decision :)

@cheenamalhotra : We'll be cleaning up the references to the old tags shortly. Currently, 2017-latest and latest tags do the same thing and it's our recommended tag to stay current for the 2017 version of SQL Server. We'll give this some thought and update as needed.

For Step 2, we'll update this after we release an update. Referring to mssql-server-linux: is appropriate for a generic reference, but since we only have one version available right now, we wanted to have the docs explicit / simple as possible to follow.

I appreciate the feedback. We don't mind updating the docs as needed, and make more generic references when future versions are available.

Jeff, Microsoft

Was this page helpful?
0 / 5 - 0 ratings