We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
We fail to push our multi-arch images
We successfully login with `docker login`, but we fail to push images. I'm unsure why, we only get 401 Unauthorized and that's it.

### From [CI run that failed](https://github.com/jupyter/docker-stacks/runs/3090573663?check_suite_focus=true)

```
  #36 exporting to image
  #36 exporting manifest sha256:f4885e2ee0a2d6f4484aa75b005e585414a56981e31ed2343f8a9f2dee27d2bf done
  #36 exporting config sha256:125cf7a049b119220a812d64eeae4ed7e3c3fd61e92aed6fcb118251165062ba done
  #36 exporting manifest sha256:e6b8d5dbd2a1cb3022cd214946f2290ac65aed7fc3787fa8fbdbd655c344ac28 done
  #36 exporting config sha256:4ae4f82b528de65a8f301eef09d66007865189d8b405fe2f65ea6d10c7994760 done
  #36 exporting manifest list sha256:30be78018e77875a79b18949ec26fcc8760399e82da17aefb0281bb177f0c2a0 done
  #36 pushing layers
  #36 ...
  
  #38 [auth] library/40b549a81031:pull,push token for registry-1.docker.io
  #38 DONE 0.0s
  
  #39 [auth] library/40b549a81031:pull,push token for registry-1.docker.io
  #39 DONE 0.0s
  
  #40 [auth] library/40b549a81031:pull,push token for registry-1.docker.io
  #40 DONE 0.0s
  
  #41 [auth] library/40b549a81031:pull,push token for registry-1.docker.io
  #41 DONE 0.0s
  
  #42 [auth] library/40b549a81031:pull,push token for registry-1.docker.io
  #42 DONE 0.0s
  
  #43 [auth] library/40b549a81031:pull,push token for registry-1.docker.io
  #43 DONE 0.0s
  
  #36 exporting to image
  #36 pushing layers 0.4s done
  #36 ERROR: authorization status: 401: authorization failed
  ------
   > exporting to image:
  ------
  error: failed to solve: authorization status: 401: authorization failed
  make: *** [Makefile:191: push-multi/base-notebook] Error 1
  make: Leaving directory '/home/runner/work/docker-stacks/docker-stacks/main'
  Error: Process completed with exit code 2.
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `tagging/tag_image.py`
Content:
```
1 #!/usr/bin/env python3
2 # Copyright (c) Jupyter Development Team.
3 # Distributed under the terms of the Modified BSD License.
4 import argparse
5 import logging
6 from plumbum.cmd import docker
7 from .docker_runner import DockerRunner
8 from .get_taggers_and_manifests import get_taggers_and_manifests
9 from .github_set_env import github_set_env
10 
11 
12 logger = logging.getLogger(__name__)
13 
14 
15 def tag_image(short_image_name: str, owner: str) -> None:
16     """
17     Tags <owner>/<short_image_name>:latest with the tags reported by all taggers
18     for the given image.
19 
20     Tags are in a GitHub Actions environment also saved to environment variables
21     in a format making it easy to append them.
22     """
23     logger.info(f"Tagging image: {short_image_name}")
24     taggers, _ = get_taggers_and_manifests(short_image_name)
25 
26     image = f"{owner}/{short_image_name}:latest"
27 
28     with DockerRunner(image) as container:
29         tags = []
30         for tagger in taggers:
31             tagger_name = tagger.__name__
32             tag_value = tagger.tag_value(container)
33             tags.append(tag_value)
34             logger.info(
35                 f"Applying tag tagger_name: {tagger_name} tag_value: {tag_value}"
36             )
37             docker["tag", image, f"{owner}/{short_image_name}:{tag_value}"]()
38 
39         if tags:
40             env_name = f'{short_image_name.replace("-", "_")}_EXTRA_TAG_ARGS'
41             docker_build_tag_args = "-t " + " -t ".join(tags)
42             github_set_env(env_name, docker_build_tag_args)
43 
44 
45 if __name__ == "__main__":
46     logging.basicConfig(level=logging.INFO)
47 
48     arg_parser = argparse.ArgumentParser()
49     arg_parser.add_argument(
50         "--short-image-name",
51         required=True,
52         help="Short image name to apply tags for",
53     )
54     arg_parser.add_argument("--owner", required=True, help="Owner of the image")
55     args = arg_parser.parse_args()
56 
57     tag_image(args.short_image_name, args.owner)
58
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/tagging/tag_image.py b/tagging/tag_image.py
--- a/tagging/tag_image.py
+++ b/tagging/tag_image.py
@@ -38,7 +38,9 @@
 
         if tags:
             env_name = f'{short_image_name.replace("-", "_")}_EXTRA_TAG_ARGS'
-            docker_build_tag_args = "-t " + " -t ".join(tags)
+            docker_build_tag_args = " ".join(
+                [f"-t {owner}/{short_image_name}:{tag}" for tag in tags]
+            )
             github_set_env(env_name, docker_build_tag_args)

{"golden_diff": "diff --git a/tagging/tag_image.py b/tagging/tag_image.py\n--- a/tagging/tag_image.py\n+++ b/tagging/tag_image.py\n@@ -38,7 +38,9 @@\n \n         if tags:\n             env_name = f'{short_image_name.replace(\"-\", \"_\")}_EXTRA_TAG_ARGS'\n-            docker_build_tag_args = \"-t \" + \" -t \".join(tags)\n+            docker_build_tag_args = \" \".join(\n+                [f\"-t {owner}/{short_image_name}:{tag}\" for tag in tags]\n+            )\n             github_set_env(env_name, docker_build_tag_args)\n", "issue": "We fail to push our multi-arch images\nWe successfully login with `docker login`, but we fail to push images. I'm unsure why, we only get 401 Unauthorized and that's it.\r\n\r\n### From [CI run that failed](https://github.com/jupyter/docker-stacks/runs/3090573663?check_suite_focus=true)\r\n\r\n```\r\n  #36 exporting to image\r\n  #36 exporting manifest sha256:f4885e2ee0a2d6f4484aa75b005e585414a56981e31ed2343f8a9f2dee27d2bf done\r\n  #36 exporting config sha256:125cf7a049b119220a812d64eeae4ed7e3c3fd61e92aed6fcb118251165062ba done\r\n  #36 exporting manifest sha256:e6b8d5dbd2a1cb3022cd214946f2290ac65aed7fc3787fa8fbdbd655c344ac28 done\r\n  #36 exporting config sha256:4ae4f82b528de65a8f301eef09d66007865189d8b405fe2f65ea6d10c7994760 done\r\n  #36 exporting manifest list sha256:30be78018e77875a79b18949ec26fcc8760399e82da17aefb0281bb177f0c2a0 done\r\n  #36 pushing layers\r\n  #36 ...\r\n  \r\n  #38 [auth] library/40b549a81031:pull,push token for registry-1.docker.io\r\n  #38 DONE 0.0s\r\n  \r\n  #39 [auth] library/40b549a81031:pull,push token for registry-1.docker.io\r\n  #39 DONE 0.0s\r\n  \r\n  #40 [auth] library/40b549a81031:pull,push token for registry-1.docker.io\r\n  #40 DONE 0.0s\r\n  \r\n  #41 [auth] library/40b549a81031:pull,push token for registry-1.docker.io\r\n  #41 DONE 0.0s\r\n  \r\n  #42 [auth] library/40b549a81031:pull,push token for registry-1.docker.io\r\n  #42 DONE 0.0s\r\n  \r\n  #43 [auth] library/40b549a81031:pull,push token for registry-1.docker.io\r\n  #43 DONE 0.0s\r\n  \r\n  #36 exporting to image\r\n  #36 pushing layers 0.4s done\r\n  #36 ERROR: authorization status: 401: authorization failed\r\n  ------\r\n   > exporting to image:\r\n  ------\r\n  error: failed to solve: authorization status: 401: authorization failed\r\n  make: *** [Makefile:191: push-multi/base-notebook] Error 1\r\n  make: Leaving directory '/home/runner/work/docker-stacks/docker-stacks/main'\r\n  Error: Process completed with exit code 2.\r\n```\n", "before_files": [{"content": "#!/usr/bin/env python3\n# Copyright (c) Jupyter Development Team.\n# Distributed under the terms of the Modified BSD License.\nimport argparse\nimport logging\nfrom plumbum.cmd import docker\nfrom .docker_runner import DockerRunner\nfrom .get_taggers_and_manifests import get_taggers_and_manifests\nfrom .github_set_env import github_set_env\n\n\nlogger = logging.getLogger(__name__)\n\n\ndef tag_image(short_image_name: str, owner: str) -> None:\n    \"\"\"\n    Tags <owner>/<short_image_name>:latest with the tags reported by all taggers\n    for the given image.\n\n    Tags are in a GitHub Actions environment also saved to environment variables\n    in a format making it easy to append them.\n    \"\"\"\n    logger.info(f\"Tagging image: {short_image_name}\")\n    taggers, _ = get_taggers_and_manifests(short_image_name)\n\n    image = f\"{owner}/{short_image_name}:latest\"\n\n    with DockerRunner(image) as container:\n        tags = []\n        for tagger in taggers:\n            tagger_name = tagger.__name__\n            tag_value = tagger.tag_value(container)\n            tags.append(tag_value)\n            logger.info(\n                f\"Applying tag tagger_name: {tagger_name} tag_value: {tag_value}\"\n            )\n            docker[\"tag\", image, f\"{owner}/{short_image_name}:{tag_value}\"]()\n\n        if tags:\n            env_name = f'{short_image_name.replace(\"-\", \"_\")}_EXTRA_TAG_ARGS'\n            docker_build_tag_args = \"-t \" + \" -t \".join(tags)\n            github_set_env(env_name, docker_build_tag_args)\n\n\nif __name__ == \"__main__\":\n    logging.basicConfig(level=logging.INFO)\n\n    arg_parser = argparse.ArgumentParser()\n    arg_parser.add_argument(\n        \"--short-image-name\",\n        required=True,\n        help=\"Short image name to apply tags for\",\n    )\n    arg_parser.add_argument(\"--owner\", required=True, help=\"Owner of the image\")\n    args = arg_parser.parse_args()\n\n    tag_image(args.short_image_name, args.owner)\n", "path": "tagging/tag_image.py"}], "after_files": [{"content": "#!/usr/bin/env python3\n# Copyright (c) Jupyter Development Team.\n# Distributed under the terms of the Modified BSD License.\nimport argparse\nimport logging\nfrom plumbum.cmd import docker\nfrom .docker_runner import DockerRunner\nfrom .get_taggers_and_manifests import get_taggers_and_manifests\nfrom .github_set_env import github_set_env\n\n\nlogger = logging.getLogger(__name__)\n\n\ndef tag_image(short_image_name: str, owner: str) -> None:\n    \"\"\"\n    Tags <owner>/<short_image_name>:latest with the tags reported by all taggers\n    for the given image.\n\n    Tags are in a GitHub Actions environment also saved to environment variables\n    in a format making it easy to append them.\n    \"\"\"\n    logger.info(f\"Tagging image: {short_image_name}\")\n    taggers, _ = get_taggers_and_manifests(short_image_name)\n\n    image = f\"{owner}/{short_image_name}:latest\"\n\n    with DockerRunner(image) as container:\n        tags = []\n        for tagger in taggers:\n            tagger_name = tagger.__name__\n            tag_value = tagger.tag_value(container)\n            tags.append(tag_value)\n            logger.info(\n                f\"Applying tag tagger_name: {tagger_name} tag_value: {tag_value}\"\n            )\n            docker[\"tag\", image, f\"{owner}/{short_image_name}:{tag_value}\"]()\n\n        if tags:\n            env_name = f'{short_image_name.replace(\"-\", \"_\")}_EXTRA_TAG_ARGS'\n            docker_build_tag_args = \" \".join(\n                [f\"-t {owner}/{short_image_name}:{tag}\" for tag in tags]\n            )\n            github_set_env(env_name, docker_build_tag_args)\n\n\nif __name__ == \"__main__\":\n    logging.basicConfig(level=logging.INFO)\n\n    arg_parser = argparse.ArgumentParser()\n    arg_parser.add_argument(\n        \"--short-image-name\",\n        required=True,\n        help=\"Short image name to apply tags for\",\n    )\n    arg_parser.add_argument(\"--owner\", required=True, help=\"Owner of the image\")\n    args = arg_parser.parse_args()\n\n    tag_image(args.short_image_name, args.owner)\n", "path": "tagging/tag_image.py"}]}