{"id":3487,"date":"2025-01-24T06:56:24","date_gmt":"2025-01-24T12:56:24","guid":{"rendered":"https:\/\/promincproductions.com\/blog\/?p=3487"},"modified":"2025-01-24T06:56:26","modified_gmt":"2025-01-24T12:56:26","slug":"update-container-version-in-qnap-container-station-3","status":"publish","type":"post","link":"https:\/\/promincproductions.com\/blog\/update-container-version-in-qnap-container-station-3\/","title":{"rendered":"Update Container Version in QNAP Container Station 3"},"content":{"rendered":"<p>This post is a tutorial on how to use Container Station 3 to update Containers and Applications on a QNAP server.<\/p>\n\n\n\n<p>Updating the software version of a container is critical to ensure the latest and greatest version is running the best features, and possibly more importantly ensure all security updates are applied.  QNAP&#8217;s Container Station will do most of the heaving lifting here &#8211; allowing you to manage the version via the QNAP admin.<\/p>\n\n\n\n<p>Now if you&#8217;ve use Container Station 2 in the past &#8211; it&#8217;s been a bit clunky to manage and at times rather difficult to do updates. [see post <a href=\"https:\/\/promincproductions.com\/blog\/update-container-version-in-qnap-container-station-2\/\" data-lasso-id=\"1005\">Update Container Version in QNAP Container Station 2<\/a>] When <a href=\"https:\/\/www.qnap.com\/en-in\/news\/2023\/qnap-releases-container-station-3-0-with-a-brand-new-ui-allowing-developers-to-efficiently-deploy-containers-and-microservices\" target=\"_blank\" rel=\"nofollow noopener\" data-lasso-id=\"1006\">QNAP released Container Station 3<\/a> &#8211; they addressed many of the shortcomings of Container Station 2.  Container Station 3 may look similar on the surface, however it has many huge improvements hidden within it.  Container Station 3 solves most of the issues\/complaints that were common in it&#8217;s prior versions.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"600\" height=\"600\" src=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2025\/01\/qnap-container-station-3-update-container.png\" alt=\"How to update e QNAP Container Station 3 Containers and Applications\" class=\"wp-image-4034\" srcset=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2025\/01\/qnap-container-station-3-update-container.png 600w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2025\/01\/qnap-container-station-3-update-container-500x500.png 500w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2025\/01\/qnap-container-station-3-update-container-150x150.png 150w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2025\/01\/qnap-container-station-3-update-container-450x450.png 450w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Identifying if an Update is Available<\/h2>\n\n\n\n<p>The remainder of this post isn&#8217;t very helpful if it&#8217;s not known that an update is needed.  So how does one identify that an update is required?  Often times as a user of the software within the container a notice will be prompted.  But not always &#8211; many updates go undetected.  And that&#8217;s partly because there isn&#8217;t a great system in place to alert when new updates come along.  So at this time, it&#8217;s a bit of a manual process.  Make a habit to check frequently (first of the month?).  Also check with the software developers &#8211; many have newsletters or alerts when new versions are released.<\/p>\n\n\n\n<p>If a Docker image was used to create the container, the version releases are published at Docker Hub &#8211; so that&#8217;s a great place to check what the latest version is.  Docker Hub uses fairly standard URL patterns, so that&#8217;s helpful.  <code>https:\/\/hub.docker\/com\/r\/&lt;namespace&gt;\/&lt;package&gt;<\/code>  So for example, if the Image name in Container Station is <code>mattermost\/mattermost-enterprise-edition<\/code>, then the docker URL is: <code>https:\/\/hub.docker.com\/r\/mattermost\/mattermost-enterprise-edition<\/code>.  Once on that page, click on the <strong>Tags<\/strong> tab &#8211; this lists all of the versions available.  Not all tagged versions are the official releases however.  Some developers put frequent tags into Docker Hub with their work in progress.  It&#8217;s typically best to take the official releases &#8211; which will often have a numbered scheme to them or start with the name <code>release-&lt;version_number&gt;<\/code>.  Each developer can choose to mange this how they&#8217;d like.  There are some standards, but not always followed the same by all developers.<\/p>\n\n\n\n<p>A helpful tip is when creating a container in Container Station use the <code>&lt;version_number&gt;<\/code> in the container name so that it&#8217;s quickly identifiable what version the container is.  This small bit of effort will pay off in the long run of not having to click into the container to look at the image to figure out what version it is (and if the version is <code>:latest<\/code> it&#8217;s still not identifiable)<\/p>\n\n\n\n<p>Another tip is that most developers publish notes of what changed in each release.  But they don&#8217;t publish this at Docker Hub.  Release notes are often available at their website, or GitHub (look for the <strong>Releases<\/strong> link in the right hand column).<\/p>\n\n\n\n<p>And lastly &#8211; once you&#8217;ve found the Docker Hub page and release notes for a software package &#8211; it&#8217;s smart to bookmark these.  Make a folder in your browsers Bookmark bar and add these there.  They will be visited again in the future I&#8217;m sure! <\/p>\n\n\n\n<p><strong>ASIDE:<\/strong> Ideally the system would ping Docker Hub from time to time to see if there is an updated version of a container and alert in some way (ie. email) so that it can be applied when desired.  Full disclosure: I don&#8217;t have that setup at this time and thus I don&#8217;t know much for specifics here.  However some possible options are <a href=\"https:\/\/containrrr.dev\/watchtower\/\" target=\"_blank\" rel=\"noopener\" data-lasso-id=\"1007\">Watchtower<\/a> or <a href=\"https:\/\/docker-notify.com\/\" target=\"_blank\" rel=\"noopener\" data-lasso-id=\"1008\">docker notify<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-versioning-works\">How Container Naming and Versioning Works<\/h2>\n\n\n\n<p>As software developers update their software, they increment the version number.  This helps to know\/understand what features\/bug-fixes you are running.  Each container has a specific naming pattern, which often includes a version number. Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace\/package<\/code><\/pre>\n\n\n\n<p>The <code>namespace<\/code> is the vendor or software manufacturer who created the image.<\/p>\n\n\n\n<p>The <code>package<\/code> is what the software is.  There can be many <code>package<\/code>s for one <code>namespace<\/code>.<\/p>\n\n\n\n<p>A <code>\/<\/code> separates the <code>namespace<\/code> and the <code>package<\/code>.<\/p>\n\n\n\n<p>To specify what version of a <code>package<\/code> the container is, a version number is added at the end of the container name.  Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace\/package:2.4<\/code><\/pre>\n\n\n\n<p>A <code>:<\/code> separates the image naming and the version.<\/p>\n\n\n\n<p>Alternatively the version can be left off as in the initial example in this section.  Or <code>latest<\/code> can be used.  Both have the same result &#8211; the latest version of the containers package will be used.  Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace\/package:latest<\/code><\/pre>\n\n\n\n<p>A wise strategy to use with the version number is to specify the specific version number. Typically the latest version number will be used, but it&#8217;s better to specify that version as opposed to using <code>:latest<\/code> so that it&#8217;s clear in the future to know what version is installed. It becomes a quick easy reference and also is helpful in ensuring that the software is what it is. Additionally when it comes to applying version updates this makes it easy to keep things straight.  Another thing to consider when deciding to use <code>:latest<\/code> or <code>:&lt;version_number&gt;<\/code> is that not versions run as expected.  There may be reasons that the latest version isn&#8217;t desired and thus forcing a specific version will ensure your system runs smoothly and as expected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Methods to Update Containers<\/h2>\n\n\n\n<p>Container Station 3 provides two methods for updating containers.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Update in place<\/li>\n\n\n\n<li>Duplicate Container<\/li>\n<\/ol>\n\n\n\n<p>Each of these methods have their pros and cons.  Understanding when to use either method and the outcomes is wise to know before beginning the update.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Feature<\/th><th>Update in Place<\/th><th>Duplicate Container<\/th><\/tr><\/thead><tbody><tr><td>Container Usage<\/td><td>The existing container is reused.<br><br>This minimizes disk space usage and doesn&#8217;t require <em>cleanup<\/em> of old containers.  However if the update goes wrong for some reason, or the updated version isn&#8217;t suitable, it becomes a larger task to rollback to an older version.<\/td><td>A new container is created for each version.<br><br>This method insulates against update failures or unforeseen reasons that a rollback to an older version if needed.  This does create multiple versions of the software package, which does result in some cleanup over time &#8211; deleting older unused containers, ensuring only the latest version is set to auto-start, etc.<\/td><\/tr><tr><td>Disk Space Usage<\/td><td>Less<\/td><td>More (until manual cleanup run)<\/td><\/tr><tr><td>Container Settings<\/td><td><\/td><td>Not all of the settings transfer to the new container &#8211; they must be configured manually in the creation process.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Application vs Container<\/h2>\n\n\n\n<p>Container Station has two methods for creating containers:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Applications<\/li>\n\n\n\n<li>Containers<\/li>\n<\/ol>\n\n\n\n<p><strong>Containers<\/strong> are the most straightforward method of using Container Station as it is the least complex, runs one system, and much of it&#8217;s configuration is pre-set.  These are single stand-alone containers.<\/p>\n\n\n\n<p><strong>Applications<\/strong> offer a more robust solution allowing multiple Docker images to be configured to be running in the same Container.  (a bit confusing, I know).  Applications will require writing a Docker Make file using a language called YAML.  This is outside of the scope of this article.  A few pre-built YAML files are offered for common applications as needed.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"214\" src=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-1024x214.png\" alt=\"Multiple Docker images running within one Container Station Application\" class=\"wp-image-3599\" title=\"Multiple Docker images running within one Container Station Application\" srcset=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-1024x214.png 1024w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-500x104.png 500w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-768x160.png 768w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-150x31.png 150w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-600x125.png 600w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-1536x320.png 1536w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-450x94.png 450w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4-1360x284.png 1360w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-4.png 1587w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Multiple Docker images running within one Container Station <strong>Application<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p>Depending on if the container to be updated is a <strong>Container<\/strong> or an <strong>Application<\/strong> requires a slightly different process as outlined below.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Container Station 2 Compatibility<\/h2>\n\n\n\n<p>In my personal experience, I found some Container Station 2 containers that the <strong>Duplicate<\/strong> method didn&#8217;t work &#8211; thus forcing a complete recreation of the container under Container Station 3.  The recreation can be made easier by clicking into the existing container and clicking the <strong>Inspect<\/strong> button.  This will display the parameters used to create the container.  This can help in guiding how to recreate the a new container.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"913\" height=\"733\" src=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image.png\" alt=\"The inspect button of a container displays the configuration of a container and can be used to recreate the container.\" class=\"wp-image-3489\" style=\"aspect-ratio:1.2455661664392905;width:504px;height:auto\" title=\"The inspect button of a container displays the configuration of a container and can be used to recreate the container.\" srcset=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image.png 913w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image-500x401.png 500w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image-768x617.png 768w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image-150x120.png 150w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image-600x482.png 600w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image-450x361.png 450w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2023\/11\/image-747x600.png 747w\" sizes=\"(max-width: 913px) 100vw, 913px\" \/><\/figure>\n<\/div>\n\n\n<p>Given how the QNAP UI works, you likely need to close this screen though before being able to create the new container.  QNAP didn&#8217;t provide a simple way to copy this&#8230;  While you can highlight the text and copy it, anything under a closed triangle expander will not copy unless it&#8217;s expanded first.  Thus you need to click on all of them to expand, then you can copy all of the text and paste it into a text editor to keep it as a reference as needed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tutorial to Update a &#8220;Container&#8221; Image in Container Station 3<\/h2>\n\n\n\n<p>Follow this process step by step to update Container Station 3 images for a <strong>Container<\/strong> on a QNAP server.  As mentioned above, there are two methods to do this &#8211; <strong>Update in Place<\/strong> and <strong>Duplicate Container<\/strong>.  Tutorials for both methods are below to guide through the process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/promincproductions.com\/blog\/?p=3487&amp;preview=true#Steps-for-Update-in-Place-to-Upgrade-an-8220Application8221-Image-in-Container-Station-3\" data-lasso-id=\"1009\">Steps for <strong>Update in Place<\/strong> to Upgrade a \u201cContainer\u201d Image in Container Station 3<\/a><\/h3>\n\n\n\n<p>When using <strong>Update in Place<\/strong> the container is reused.  The settings can be altered with this method.  If issues with the updated version are encountered the method of going back is to update the container again changing the settings back.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Login to the QNAP Admin Panel<\/li>\n\n\n\n<li>Open <strong>Container Station<\/strong><\/li>\n\n\n\n<li>Click on <strong>Containers<\/strong><\/li>\n\n\n\n<li>Click on the Name of the container to update<\/li>\n\n\n\n<li>Click the down arrow next to the <strong>Edit<\/strong> button and select either the <strong>Recreate Directly<\/strong> or <strong>Recreate<\/strong> option\n<ul class=\"wp-block-list\">\n<li>To know which option to use, look at the <strong>Image<\/strong> heading in the left hand column of the container information panel.\n<ul class=\"wp-block-list\">\n<li>If the <strong>Image<\/strong> has <code>:latest<\/code> at the end of the name or no specific version number (ie. <code>:12.1.4<\/code>) then the <strong>Recreate Directly<\/strong> option should be used as no modification will be necessary.<\/li>\n\n\n\n<li>If the <strong>Image<\/strong> has a specific version number (ie. <code>:12.1.4<\/code>) then the <strong>Recreate<\/strong> option is needed to allow for changing the container settings.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"method-container-recreate-directly\">Recreate Directly Method<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check the <strong>Try pulling the image from the registry before creating the container.<\/strong> check box.<\/li>\n\n\n\n<li>Click the <strong>Yes<\/strong> button<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Recreate Method<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Alter the <strong>Image:<\/strong> field setting the image number at the end of the name as needed (ie. <code>:12.0.1<\/code>).\n<ul class=\"wp-block-list\">\n<li>See section <a href=\"#how-versioning-works\">How Container Naming and Versioning Works<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Check the <strong>Try pulling the image from the registry before creating the container.<\/strong> check box.<\/li>\n\n\n\n<li>Click the <strong>Next<\/strong> button<\/li>\n\n\n\n<li>Set the <strong>Restart policy:<\/strong> to <code>Always<\/code> so the container will restart if it were to crash or upon server restart<\/li>\n\n\n\n<li>Click the <strong>Next<\/strong> button<\/li>\n\n\n\n<li>Click the <strong>Finish<\/strong> button<\/li>\n<\/ol>\n\n\n\n<p>At this point Container Station will take over and download the image from Docker hub, create the container, and finally auto-start the container (based on the policy set).  After a bit of time the container will be running and this task is complete.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/promincproductions.com\/blog\/?p=3487&amp;preview=true#Steps-for-Update-in-Place-to-Upgrade-an-8220Application8221-Image-in-Container-Station-3\" data-lasso-id=\"1010\">Steps for <strong>Duplicate Container<\/strong> to Upgrade a \u201cContainer\u201d Image in Container Station 3<\/a><\/h3>\n\n\n\n<p>Duplicating a container results in more than one containers of different versions.  This provides a quick\/easy method to roll-back to the prior container if needed.  This method is not recommended when the version is <code>:latest<\/code> however.  Without a clearly defined version number anytime the underlying image is updated any container with a version of <code>:latest<\/code> would inherit that update.  The <strong><a href=\"#method-container-recreate-directly\">Recreate Directly Method<\/a><\/strong> above is desired in that case.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Login to Container Station on QNAP<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Login to the QNAP Admin Panel<\/li>\n\n\n\n<li>Open <strong>Container Station<\/strong><\/li>\n\n\n\n<li>Click on <strong>Containers<\/strong><\/li>\n\n\n\n<li>Click on the Name of the container to update<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Disable Auto-restart<\/h4>\n\n\n\n<p>Typically containers are configured to restart automatically.  Since the existing container will no longer be used, it&#8217;s wise to ensure that it&#8217;s no longer going to auto-restart.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the <strong>Edit<\/strong> button<\/li>\n\n\n\n<li>Set the <strong>Restart Policy<\/strong> to <code>None<\/code><\/li>\n\n\n\n<li>Click the <strong>Apply<\/strong> button<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1016\" height=\"332\" src=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7.png\" alt=\"Change the restart policy for the existing container to none\" class=\"wp-image-3641\" title=\"Change the restart policy for the existing container to none\" srcset=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7.png 1016w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7-500x163.png 500w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7-768x251.png 768w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7-150x49.png 150w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7-600x196.png 600w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-7-450x147.png 450w\" sizes=\"(max-width: 1016px) 100vw, 1016px\" \/><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Backup Settings<\/h4>\n\n\n\n<p>Some of the settings don&#8217;t carry over as you&#8217;d expect.  So doing a quick prep-work step makes it easy to get past this hurdle.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the <strong>Inspect<\/strong> button<\/li>\n\n\n\n<li>Expand out the closed arrows to reveal sub-content &#8211; namely the <strong>Mount<\/strong> section.<\/li>\n\n\n\n<li>Copy the contents of the Inspect window and paste it into a text editor to reference later.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Duplicate the Container<\/h4>\n\n\n\n<p>Next to start the creation of a new updated container.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the <strong>Stop<\/strong> button to stop the container<\/li>\n\n\n\n<li>Click the down arrow next to the <strong>Edit<\/strong> button and select the <strong>Duplicate<\/strong> option<\/li>\n\n\n\n<li>In the <strong>Image<\/strong> field set the image name and version.\n<ul class=\"wp-block-list\">\n<li><code>&lt;namespace&gt;\/&lt;package&gt;:&lt;version&gt;<\/code><\/li>\n\n\n\n<li><code>&lt;version&gt;<\/code> can be set to <code>latest<\/code> to pull the most recent version or set to a specific version number.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Check the <strong>Try pulling the image from the registry before creating the server<\/strong> box<\/li>\n\n\n\n<li>Click the <strong>Next<\/strong> button<\/li>\n\n\n\n<li>Set the <strong>Name<\/strong> accordingly<\/li>\n\n\n\n<li>Set the <strong>Restart policy<\/strong> as desired.  In most cases it is ideal to use <code>Always<\/code><\/li>\n\n\n\n<li>Some of the settings don&#8217;t transfer in from the prior container.  Click the <strong>Advanced Settings<\/strong> and go through all the settings to ensure they are set as expected.  This is where the previous settings from the <strong>Inspect<\/strong> window in the previous step can be used to reference how the settings should be configured.<\/li>\n\n\n\n<li>Click the <strong>Apply<\/strong> button<\/li>\n\n\n\n<li>Click the <strong>Next<\/strong> button to move onto the <strong>Summary<\/strong> step<\/li>\n\n\n\n<li>Click the <strong>Finish<\/strong> button<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1013\" height=\"778\" src=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8.png\" alt=\"Set the image name and version of the duplicate container\" class=\"wp-image-3643\" title=\"Set the image name and version of the duplicate container\" srcset=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8.png 1013w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8-500x384.png 500w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8-768x590.png 768w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8-150x115.png 150w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8-600x461.png 600w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8-450x346.png 450w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-8-781x600.png 781w\" sizes=\"(max-width: 1013px) 100vw, 1013px\" \/><\/figure>\n<\/div>\n\n\n<p>Container Station will take some time to download the image from Docker hub, create the container, and start it up.  At this point the version update of the package should be up and running on the duplicated container and all is set to go.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tutorial to Update an &#8220;Application&#8221; Image in Container Station 3<\/h2>\n\n\n\n<p>These steps will walk through updating the images within an <strong>Application<\/strong> on a QNAP server.  These tutorials will cover both the <strong>Update in Place<\/strong> and <strong>Duplicate Container<\/strong> methods.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Login to Container Station on QNAP<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Login to the QNAP Admin Panel<\/li>\n\n\n\n<li>Open <strong>Container Station<\/strong><\/li>\n\n\n\n<li>Click on <strong>Applications<\/strong><\/li>\n\n\n\n<li>Click on the <strong>Name<\/strong> of the Application to update the images for<\/li>\n<\/ol>\n\n\n\n<p>Within this screen the multiple containers\/images that are running within the application are listed.  Depending on the application, maybe one image would need to be updated but not the others.<\/p>\n\n\n\n<p>It is possible to duplicate the entire Application using the down arrow next to the <strong>Edit<\/strong> button.  But that&#8217;s not the focus of what is to be one here as the focus of this tutorial is for the underlying images.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Steps for <strong>Update in Place<\/strong> to Upgrade an &#8220;Application&#8221; Image in Container Station 3<\/h3>\n\n\n\n<p>This method can only be used for applications where the version number is not specified in the applications YAML configuration for the <code>image<\/code>, or the version is set to <code>:latest<\/code>.  The same application will be used.  The process will fetch the latest copy of the image from Docker Hub to use for this application.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the down arrow next to the <strong>Edit<\/strong> button<\/li>\n\n\n\n<li>Select the <strong>Recreate<\/strong> option<\/li>\n\n\n\n<li>Click the <strong>Update<\/strong> button<\/li>\n<\/ol>\n\n\n\n<p>Wait as QNAP goes through it&#8217;s processes to download the image from Docker Hub, install it, and restart the container.  In time, the container will start itself back up and be running again.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Steps for <strong>Duplicate Container<\/strong> to Upgrade an &#8220;Application&#8221; Image in Container Station 3<\/h3>\n\n\n\n<p>Duplicating an application means that the original application stays intact. The benefit here is that if anything were to go awry, the original application is there to fallback on. This creates a layer of safety that is wise. The downside is that the old image will still stay around and after the duplicated application is proved to be running sufficiently, the original should be manually deleted. If not, it eats up file space and creates more clutter. Not a huge downside, but could be an issue in time.<\/p>\n\n\n\n<p><strong>NOTE:<\/strong> Some containers\/applications do upgrade resources such as databases and configuration files when and updated version is applied.  There is a chance that this could break the safety fallback of re-enabling the older version of the application.  Identifying which applications this will affect and which won&#8217;t is out of the scope of this post however.  But some research and critical thinking about how the application is built and runs can be applied to help here.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Disable Auto-restart<\/h4>\n\n\n\n<p>It is common that the containers are configured to restart automatically should they fail.  Once this process is complete  Since the existing container will no longer be used, it&#8217;s wise to ensure that it&#8217;s no longer going to auto-restart.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click on the <strong>Applications<\/strong> tab in <strong>Container Station<\/strong><\/li>\n\n\n\n<li>Click on the <strong>Application<\/strong> name that will be duplicated<\/li>\n\n\n\n<li>Set the <strong>Restart Policy<\/strong> to <code>None<\/code><\/li>\n\n\n\n<li>Click the <strong>Apply<\/strong> button<\/li>\n<\/ol>\n\n\n\n<p>If multiple images are part of the application, repeat this process for each image.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Stop the Current Container<\/h4>\n\n\n\n<p>Stop the running application and it&#8217;s images as they will no longer be needed &#8211; they are being replaced by the newer version.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the <strong>Stop<\/strong> button in the top right<\/li>\n<\/ol>\n\n\n\n<p>Depending on the image running, this may take some time to complete as it may have a shutdown sequence to execute.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Duplicate the Container YAML<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click on the <strong>Applications<\/strong> tab in <strong>Container Station<\/strong><\/li>\n\n\n\n<li>Click on the <strong>Application<\/strong> name that will be duplicated<\/li>\n\n\n\n<li>Click the down arrow next to the <strong>Edit<\/strong> button and select the <strong>Duplicate<\/strong> option<\/li>\n\n\n\n<li>Select <strong>Duplicate<\/strong><\/li>\n\n\n\n<li>Set a name in the <strong>Application name:<\/strong> field.  It is wise to include the package name and version number that the new container will be updated to.<\/li>\n\n\n\n<li>In the <strong>YAML code:<\/strong> section, change the <code>image<\/code> properties value setting the proper <code>namespace\/package:version<\/code> to the desired version.<\/li>\n\n\n\n<li>Click the <strong>Create<\/strong> button<\/li>\n<\/ol>\n\n\n\n<p>At this time the new version of the image needs to be pulled from Docker Hub into the QNAP server and thus it will take a few minutes to complete.  The progress of this can be monitored in the queue at the top of the QNAP web admin.  Notice a counter shows up on this queue loader to indicate that it is making the container.  When it is complete, it will show in the list of applications.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"452\" height=\"97\" src=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-6.png\" alt=\"Container creation showing in the queue\" class=\"wp-image-3629\" title=\"Container creation showing in the queue\" srcset=\"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-6.png 452w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-6-150x32.png 150w, https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2024\/03\/image-6-450x97.png 450w\" sizes=\"(max-width: 452px) 100vw, 452px\" \/><\/figure>\n<\/div>\n\n\n<p>Click on the main <strong>Applications<\/strong> tab in the left hand column to see what applications are running.  In time, the new application will show in this list.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Enable Auto-restart<\/h4>\n\n\n\n<p>It&#8217;s typically desired to have the application restart automatically if it were to crash or the system is restarted.  Since auto-restart was disabled before duplicating the application, this application will not auto-restart.  Enable auto-restart for the new application.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click on the <strong>Applications<\/strong> tab in <strong>Container Station<\/strong><\/li>\n\n\n\n<li>Click on the <strong>Application<\/strong> name that will be duplicated<\/li>\n\n\n\n<li>Set the <strong>Restart Policy<\/strong> to <code>Always<\/code><\/li>\n\n\n\n<li>Click the <strong>Apply<\/strong> button<\/li>\n<\/ol>\n\n\n\n<p>If multiple images are part of the application, repeat this process for each image.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Update Options are Greyed Out<\/h3>\n\n\n\n<p>For whatever reason some containers created in prior versions of Container Station can not be updated using the processes explained here.  The <code>Recreate<\/code> and <code>Duplicate<\/code> options are greyed out and do not work.  This implies that there is an incompatibility with the container and how Container Station 3 work.  The workaround here is to manually build a new version of the container in Container Station 3.  From this point forward the update methods outlined here should succeed since the new <em>base<\/em> container was built in Container Station 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.qnap.com\/en\/how-to\/tutorial\/article\/how-to-use-container-station-3\" data-lasso-id=\"1011\">Container Station 3 Documentation<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>This post is a tutorial on how to use Container Station 3 to update Containers and Applications on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4034,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"wprm-recipe-roundup-name":"","wprm-recipe-roundup-description":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[384],"tags":[335,330],"class_list":["post-3487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-qnap","tag-container-station","tag-qnap"],"jetpack_featured_media_url":"https:\/\/promincproductions.com\/blog\/wp-content\/uploads\/2025\/01\/qnap-container-station-3-update-container.png","jetpack_shortlink":"https:\/\/wp.me\/p4BbcR-Uf","jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/posts\/3487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/comments?post=3487"}],"version-history":[{"count":21,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/posts\/3487\/revisions"}],"predecessor-version":[{"id":4035,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/posts\/3487\/revisions\/4035"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/media\/4034"}],"wp:attachment":[{"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/media?parent=3487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/categories?post=3487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/promincproductions.com\/blog\/wp-json\/wp\/v2\/tags?post=3487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}