Skip to content

[🐛 Bug]: node-chrome and node-edge can no longer be used by buildx to create image for linux/arm64 environments #2276

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
garth-gross opened this issue Jun 3, 2024 · 6 comments

Comments

@garth-gross
Copy link

What happened?

For over a year we have been using docker's buildx functionality to build linux/amd64 and linux/arm64 images from the selenium/node-chrome and selenium/node-edge docker images as there was additional functionality that we needed to add to the base image.

Up until version 125.0 we had no problems creating images, but once the 125.0 image was released, we are now getting the following error during the build process:

ERROR: failed to solve: no match for platform in manifest: not found

Attached is a proof of failure that mimics the process we are using
Duplication:
Pre-Reqs:
- Docker installed (confirmed failing on both Mac Docker Desktop and Ubuntu 22.04 Docker versions.)

  1. Setup docker multi-architecture build context:
 docker buildx create --name docker-multiarch \                
  --use --driver-opt network=host --bootstrap
  1. Unzip the files included in: selenium-pof.zip
  2. cd into the extracted directory
  3. Run the following command to build:
    docker buildx bake
    

Result: Build fails with error:

ERROR: failed to solve: no match for platform in manifest: not found

Expected: Build completes

Additional notes about selenium-pof.zip:
This configuration is used to be able to build images that might have slight tweaks to them (like base OS, different version numbers, different base images with the same steps applied).

  1. docker-bake.hcl is where most of the logic is contained. Specific line to care about:
    • lines 24-27: dictate what platforms to build
    • line 45: defines the location of the folder where the Dockerfile used the build the images lives
    • lines 46-48: defines the contexts using environment variables with the image to pull that is sent to the Dockerfile. The qa-browsers-base value is used by the Dockerfile to determine the image to build from.
    • lines 49-52: Defines the parameters used to build a matrix of images. With the default values, the following images will be built using the Dockerfile:
      • selenium/node-chrome:125.0 (linux/arm64, linux/amd64)
      • selenium/node-edge:125.0 (linux/arm64, linux/amd64)
  2. Run the build with the Default values should error out. If you change docker-bake.hcl line 51 to be the following, the images will build properly:
     upstream_version = [ "124.0" ]
    
  3. The Dockerfile used by the build process is located in the selenium-pof/qa/qa-browsers directory. It leverages the qa-browsers-base and platforms items defined in docker-bake.hcl to determine the image and platforms to build for.

Other things to note:
I can't pull the image on a M3 MacBook Pro. Running:

docker pull selenium/node-chrome:latest 

Yields:

latest: Pulling from selenium/node-chrome
no matching manifest for linux/arm64/v8 in the manifest list entries

Command used to start Selenium Grid with Docker (or Kubernetes)

docker buildx bake

Relevant log output

ERROR: failed to solve: no match for platform in manifest: not found

Operating System

Ubuntu 22.04

Docker Selenium version (image tag)

node-chrome:125.0

Selenium Grid chart version (chart version)

No response

Copy link

github-actions bot commented Jun 3, 2024

@garth-gross, thank you for creating this issue. We will troubleshoot it as soon as we can.


Info for maintainers

Triage this issue by using labels.

If information is missing, add a helpful comment and then I-issue-template label.

If the issue is a question, add the I-question label.

If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), add the applicable G-* label, and it will provide the correct link and auto-close the issue.

After troubleshooting the issue, please add the R-awaiting answer label.

Thank you!

@garth-gross
Copy link
Author

garth-gross commented Jun 3, 2024

So looking further into this, v124.0 of selenium/node-chrome does have an arm64 download available, but inspecting the manifest it is leveraging a amd64 version of Linux. There must be some kind of emulation mode that is in play that allowed previous versions to work.

Output from command: docker manifest inspect -v selenium/node-chrome:124.0 run on an M3 MacBook Pro:

{
	"Ref": "docker.io/selenium/node-chrome:124.0",
	"Descriptor": {
		"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
		"digest": "sha256:8cea36506f8bdf928469c34a8cb1e10861f4ca5517873ffc9a6caaadf2a91069",
		"size": 3868,
		"platform": {
			"architecture": "amd64",
			"os": "linux"
		}
	},
	"Raw": "ewogICAic2NoZW1hVmVyc2lvbiI6IDIsCiAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5kaXN0cmlidXRpb24ubWFuaWZlc3QudjIranNvbiIsCiAgICJjb25maWciOiB7CiAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5jb250YWluZXIuaW1hZ2UudjEranNvbiIsCiAgICAgICJzaXplIjogMjIyMTksCiAgICAgICJkaWdlc3QiOiAic2hhMjU2OjhlNmQ2ODQ2YmNlM2M5NDgzN2ViYzllYzQ1ODEzMmNhYzEzZmNhYjQzZGFjZGQxY2Y3MTRjMTUyZjk2MDA2ZTgiCiAgIH0sCiAgICJsYXllcnMiOiBbCiAgICAgIHsKICAgICAgICAgIm1lZGlhVHlwZSI6ICJhcHBsaWNhdGlvbi92bmQuZG9ja2VyLmltYWdlLnJvb3Rmcy5kaWZmLnRhci5nemlwIiwKICAgICAgICAgInNpemUiOiAyOTUzMzk0OSwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6YThiMWM1ZjgwYzJkMmE3NTdhZGM5NjNlM2ZlMmRhZDBiNGQyMjlmODNkZjMzNDlmYmI3MGU0ZDEyZGQ0ODgyMiIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDE0MDA4NDE3OCwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6YmQ2OGRkNTk1N2IyNTg3MGFkYmY2ODEyZGQ2NzI4MjEwMWVlNmJkZmQzOTczOWYzNWJmZTVlMDQ0MGE4OGUwZCIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDg0MCwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6YzgyMjFmYWY3MjJhYzk1NGQ2OGRjYWVjMmIyNDRiM2I2ZjNlZWEyYjU5NmRiMTkyY2VlZGY2N2UyYzM4M2QzZiIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDc1MiwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6MDc2YWI5NWY1ZTQxOWI3MGU1MjJlNDgxNDIwZTc5NTcwODZmNGIzYWNkZjQ4ZGE0NDhjMDk1ODM3ZTMxZTk2OSIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDEzNjk1NTc5MCwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6MDY5MzJhZjNlM2FmOTkzZjlkZWQ5MjdmMDdmMmM2NTIzNTBkYjk1ZmM1MDA0ODFiOThjNDAzYzk3MGNhNzZkNyIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDM3MzQsCiAgICAgICAgICJkaWdlc3QiOiAic2hhMjU2Ojk2MDdmYjBiNjgyNjQ3ZTMxMzIwMDQxZmZjMjdhYmQ0OGY5N2IyYzQ0Mjk2MmYxM2Y2MTc0ZGRkNDY3NmQ0OWIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIm1lZGlhVHlwZSI6ICJhcHBsaWNhdGlvbi92bmQuZG9ja2VyLmltYWdlLnJvb3Rmcy5kaWZmLnRhci5nemlwIiwKICAgICAgICAgInNpemUiOiAxODQzMiwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6YzdiODU2NjI1OGViNGNlMTc5YzgxOTE2MTBjMDE3MDQ2MTUyOWM5YTIwNDk2ZWJlZGJjOTAwZGZkZGJlNjQwYyIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDY3OSwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6MGE4YjBiNDdlZDgwNzk1NzhmNzY0YWQxNjc0N2Y2NDA1ZmEyYTc4MTIxM2Y5NGNlNjVjYzc2NWZhNmI2MTZiZiIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDE3MTg1MTg0MSwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6MzA3MGEwNGZkY2ZkNTViMTk5YTZmODliYTg1OTVjMDE1NjVkMDAxYWI5NTMzNzcwNGQ5MmMxMjE0NTAxNjU3MCIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDYwNiwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6NTdjMDE3MGU0MTM0ODE1Y2IyOWNlOGI4YTYwNzcxNzlkZWE3ZTBmZTI2OTgyY2U5MTlmMjdkOGE3OTJiNWQyOSIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDE0OTksCiAgICAgICAgICJkaWdlc3QiOiAic2hhMjU2OjQwZDFkMTA1MTNhNTUyMTIzOGU1OThiNjM3NGEzNGY4ZGFkMzA5ZTFhZDBlYjFiYzZlZDQyNDNmYzI1MTA2YWMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIm1lZGlhVHlwZSI6ICJhcHBsaWNhdGlvbi92bmQuZG9ja2VyLmltYWdlLnJvb3Rmcy5kaWZmLnRhci5nemlwIiwKICAgICAgICAgInNpemUiOiA4MjQ1NzQ3LAogICAgICAgICAiZGlnZXN0IjogInNoYTI1Njo3NWNhMmIyYzRhNWVhM2MyYjcxMWE2ZWJlZjk5MjI3NDk0NzQ1NzFhNjViNzJhYTI3ZTMyZTVjNmQ1NmEyZGZlIgogICAgICB9LAogICAgICB7CiAgICAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5pbWFnZS5yb290ZnMuZGlmZi50YXIuZ3ppcCIsCiAgICAgICAgICJzaXplIjogNzYyLAogICAgICAgICAiZGlnZXN0IjogInNoYTI1Njo1YjliMTcyNDBhOWEyNDAzOWNmODI4OTk0MzM5N2IyMDg5M2FkOTg5OGVhZmNjN2VlZWIwYmE3MGMyMzZjZDUxIgogICAgICB9LAogICAgICB7CiAgICAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5pbWFnZS5yb290ZnMuZGlmZi50YXIuZ3ppcCIsCiAgICAgICAgICJzaXplIjogNTcxLAogICAgICAgICAiZGlnZXN0IjogInNoYTI1NjpjNTdiMGQwMjRmM2YxY2FmOTU1N2JjNTBjM2QxMTIwODBmMzNjZDIxMDgzNGVmOTIzYTE1ZDY2YWY4NDYyMzEzIgogICAgICB9LAogICAgICB7CiAgICAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5pbWFnZS5yb290ZnMuZGlmZi50YXIuZ3ppcCIsCiAgICAgICAgICJzaXplIjogMTc3LAogICAgICAgICAiZGlnZXN0IjogInNoYTI1Njo2M2FhNGIzOWZmZTI3N2M3MmQyNWI4OTc4Mjg4YzJiMTVhYmVkYmI4YTViYmEwMDk1ZmY1ZDg0NTlhMWVjMzg4IgogICAgICB9LAogICAgICB7CiAgICAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5pbWFnZS5yb290ZnMuZGlmZi50YXIuZ3ppcCIsCiAgICAgICAgICJzaXplIjogMTc3LAogICAgICAgICAiZGlnZXN0IjogInNoYTI1Njo0OTJiOGU5NjVmMzM0Nzk4MTY1NjEzZTZmZTZhNWVkZGQyY2ZjZGFlYTU5OTJmMTg5Y2RmZjRhNjAyYjM0ZTMyIgogICAgICB9LAogICAgICB7CiAgICAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5pbWFnZS5yb290ZnMuZGlmZi50YXIuZ3ppcCIsCiAgICAgICAgICJzaXplIjogMjI3LAogICAgICAgICAiZGlnZXN0IjogInNoYTI1Njo2OTgyODE0ZTNkOWY3ZWMxNTA4ZGEwOGQzNmZmZTAyZmVlZGQ1NjNiMjMyOTllNDhjODlmNTMxMDhlNjliNGVkIgogICAgICB9CiAgIF0KfQ==",
	"SchemaV2Manifest": {
		"schemaVersion": 2,
		"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
		"config": {
			"mediaType": "application/vnd.docker.container.image.v1+json",
			"size": 22219,
			"digest": "sha256:8e6d6846bce3c94837ebc9ec458132cac13fcab43dacdd1cf714c152f96006e8"
		},
		"layers": [
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 29533949,
				"digest": "sha256:a8b1c5f80c2d2a757adc963e3fe2dad0b4d229f83df3349fbb70e4d12dd48822"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 140084178,
				"digest": "sha256:bd68dd5957b25870adbf6812dd67282101ee6bdfd39739f35bfe5e0440a88e0d"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 840,
				"digest": "sha256:c8221faf722ac954d68dcaec2b244b3b6f3eea2b596db192ceedf67e2c383d3f"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 752,
				"digest": "sha256:076ab95f5e419b70e522e481420e7957086f4b3acdf48da448c095837e31e969"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 136955790,
				"digest": "sha256:06932af3e3af993f9ded927f07f2c652350db95fc500481b98c403c970ca76d7"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 3734,
				"digest": "sha256:9607fb0b682647e31320041ffc27abd48f97b2c442962f13f6174ddd4676d49b"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 18432,
				"digest": "sha256:c7b8566258eb4ce179c8191610c0170461529c9a20496ebedbc900dfddbe640c"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 679,
				"digest": "sha256:0a8b0b47ed8079578f764ad16747f6405fa2a781213f94ce65cc765fa6b616bf"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 171851841,
				"digest": "sha256:3070a04fdcfd55b199a6f89ba8595c01565d001ab95337704d92c12145016570"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 606,
				"digest": "sha256:57c0170e4134815cb29ce8b8a6077179dea7e0fe26982ce919f27d8a792b5d29"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 1499,
				"digest": "sha256:40d1d10513a5521238e598b6374a34f8dad309e1ad0eb1bc6ed4243fc25106ac"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 8245747,
				"digest": "sha256:75ca2b2c4a5ea3c2b711a6ebef9922749474571a65b72aa27e32e5c6d56a2dfe"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 762,
				"digest": "sha256:5b9b17240a9a24039cf8289943397b20893ad9898eafcc7eeeb0ba70c236cd51"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 571,
				"digest": "sha256:c57b0d024f3f1caf9557bc50c3d112080f33cd210834ef923a15d66af8462313"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 177,
				"digest": "sha256:63aa4b39ffe277c72d25b8978288c2b15abedbb8a5bba0095ff5d8459a1ec388"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 177,
				"digest": "sha256:492b8e965f334798165613e6fe6a5eddd2cfcdaea5992f189cdff4a602b34e32"
			},
			{
				"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
				"size": 227,
				"digest": "sha256:6982814e3d9f7ec1508da08d36ffe02feedd563b23299e48c89f53108e69b4ed"
			}
		]
	}
}

I am guessing that #2266 "fixed" this bug, and I see that selenium/node-chromium is what should be used as a base image going forward (at least until a Chrome arm64 image is available).

Is there another option for edge now that this new code is in place?

@VietND96
Copy link
Member

VietND96 commented Jun 3, 2024

Hi @garth-gross, I am also surprise when reading this statement

For over a year we have been using docker's buildx functionality to build linux/amd64 and linux/arm64 images from the selenium/node-chrome and selenium/node-edge docker images

Since only linux/amd64 images were published to selenium registry before. I guess before it worked due to buildx and emulator functionality. The node chrome & edge is used as base to build, probably based on amd64 image, buildx can build multi-arch images, but inside the built image it would be mixed (binaries pre-built in base image with amd64, include chrome & edge, and something new just added within multi-arch).
Using the same approach, with a small update in the Dockerfile in command FROM --platform=linux/amd64 qa-browsers-base, can you see if it can force the host to pull a different arch image?
I feel this way like a trick to replica a base amd64 (chrome & edge) to arm64 image. But we not sure all functionality of browser binary can work properly in arch arm64 or not.

Regarding edge, currently we also don't have an alternative option for it.

@garth-gross
Copy link
Author

Hi @VietND96,

Using the same approach, with a small update in the Dockerfile in command FROM --platform=linux/amd64 qa-browsers-base, can you see if it can force the host to pull a different arch image?

This does work when I tried it. I am able to build the image and a smoke test of some of our automation, on a M3 MacBook Pro using Docker Desktop, using the built images completed without issue.

I appreciate the solution provided and it gives us a additional point of discussion moving forward.

I think this ticket can be closed as there isn't anything that needs to be done; it was just a misunderstanding of what was happening before the latest changes. Thank you again for providing the additional information.

Copy link

💬 Please ask questions at:

Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked and limited conversation to collaborators Jul 26, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants