Trying to install Plone 6 on Windows gets me half way

I took the leap and tried installing Plone 6 on my Windows 10. (Containers – Install — Plone Documentation v6.0)
The instructions were clear and easy to follow and all went well.
When I created a new site with the classic UI - and accessed the site via local host, the site started and displayed properly.

However, creating a new site with Volto, and trying to navigate to the site, creates the problem shown here:

I believe both the back end and frontend servers are running
Here is what Docker looks like: (shows both services are running)

Finally, I see the location where I can choose to create a classic or volto (you can see I've created a few sites.

What am i missing?

Hey Wayne. It certainly looks like you have both the backend (port 8080) and frontend (3000) running on their own, and just some problem with the communication from the frontend to the backend. This is a bit surprising since the backend is running at the URL that the frontend uses by default. Could you take a look at the network tab of the browser dev tools to see what URLs the frontend is trying to load unsuccessfully?

Smells like a firewall issue between the frontend and backend. Can you check your firewall's log?


  1. I turned off my Norton firewall - no change.

  2. Note: during the attempt connection between the front and back ends, i briefly (2 seconds) see the Volto front end

  3. i do have python 3.11.1 installed separately for other reasons

  4. i looked at the error logs and try to guess at what might give you folks some hints. Not sure if it will help, but here it is

**partial error log**
**Note:  another%20plone%206 is the name of the plone site.**
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/OFS/", line 134, in __bobo_traverse__
2023-01-04 13:06:10     REQUEST.RESPONSE.notFoundError(f"{name}\n{method}")
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/ZPublisher/", line 800, in notFoundError
2023-01-04 13:06:10     raise NotFound(self._error_html(
2023-01-04 13:06:10 zExceptions.NotFound: <!DOCTYPE html><html>
2023-01-04 13:06:10   <head><title>Site Error</title><meta charset="utf-8" /></head>
2023-01-04 13:06:10   <body bgcolor="#FFFFFF">
2023-01-04 13:06:10   <h2>Site Error</h2>
2023-01-04 13:06:10   <p>An error was encountered while publishing this resource.
2023-01-04 13:06:10   </p>
2023-01-04 13:06:10   <p><strong>Resource not found</strong></p>
2023-01-04 13:06:10 
2023-01-04 13:06:10   Sorry, the requested resource does not exist.<p>Check the URL and try again.</p><p><b>Resource:</b> another%20plone%206
2023-01-04 13:06:10 GET</p>
2023-01-04 13:06:10   <hr noshade="noshade"/>
2023-01-04 13:06:10 
2023-01-04 13:06:10   <p>Troubleshooting Suggestions</p>
2023-01-04 13:06:10 
2023-01-04 13:06:10   <ul>
2023-01-04 13:06:10   <li>The URL may be incorrect.</li>
2023-01-04 13:06:10   <li>The parameters passed to this resource may be incorrect.</li>
2023-01-04 13:06:10   <li>A resource that this resource relies on may be
2023-01-04 13:06:10       encountering an error.</li>
2023-01-04 13:06:10   </ul>
2023-01-04 13:06:10 
2023-01-04 13:06:10   <p>If the error persists please contact the site maintainer.
2023-01-04 13:06:10   Thank you for your patience.
2023-01-04 13:06:10   </p></body></html>
2023-01-04 13:06:10 2023-01-04 21:06:10 ERROR [][waitress-1] Couldn't resolve /++theme++barceloneta/rules.xml
2023-01-04 13:06:10 2023-01-04 21:06:10 ERROR [plone.transformchain:69][waitress-1] Unexpected error whilst trying to apply transform chain
2023-01-04 13:06:10 Traceback (most recent call last):
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/plone/transformchain/", line 59, in __call__
2023-01-04 13:06:10     newResult = handler.transformIterable(result, encoding)
2023-01-04 13:06:10                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/plone/app/theming/", line 166, in transformIterable
2023-01-04 13:06:10     transform = self.setupTransform(runtrace=runtrace)
2023-01-04 13:06:10                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/plone/app/theming/", line 92, in setupTransform
2023-01-04 13:06:10     transform = compileThemeTransform(
2023-01-04 13:06:10                 ^^^^^^^^^^^^^^^^^^^^^^
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/plone/app/theming/", line 716, in compileThemeTransform
2023-01-04 13:06:10     compiledTheme = compile_theme(
2023-01-04 13:06:10                     ^^^^^^^^^^^^^^
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/diazo/", line 129, in compile_theme
2023-01-04 13:06:10     rules_doc = process_rules(
2023-01-04 13:06:10                 ^^^^^^^^^^^^^^
2023-01-04 13:06:10   File "/app/lib/python3.11/site-packages/diazo/", line 293, in process_rules
2023-01-04 13:06:10     rules_doc = etree.parse(rules, parser=rules_parser)
2023-01-04 13:06:10                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2023-01-04 13:06:10   File "src/lxml/etree.pyx", line 3538, in lxml.etree.parse
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 1876, in lxml.etree._parseDocument
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 1902, in lxml.etree._parseDocumentFromURL
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 1805, in lxml.etree._parseDocFromFile
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 1177, in lxml.etree._BaseParser._parseDocFromFile
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 615, in lxml.etree._ParserContext._handleParseResultDoc
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 725, in lxml.etree._handleParseResult
2023-01-04 13:06:10   File "src/lxml/parser.pxi", line 652, in lxml.etree._raiseParseError
2023-01-04 13:06:10 OSError: Error reading file '/++theme++barceloneta/rules.xml': failed to load external entity "/++theme++barceloneta/rules.xml"
2023-01-04 13:06:10 - admin [04/Jan/2023:21:06:10 +0000] "GET /another%20plone%206 HTTP/1.1" 200 36986 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0"

Hi David, OK i tried reinstalling Docker and the Plone container, ran it and got the same error.
So i did as you asked and ran in dev tools
First, you can see it is calling 3000 as it should
Second, I activated the pause on exception and I attached what happened.

Does this help?

@rileydog I'd like to see what's on the Network tab in the browser dev tools. Specifically if there are requests that the frontend is making to the backend that are not successful, I'm curious what URLs were requested.

I'm not sure the exception highlighted in your screenshot is relevant. You definitely should uncheck the "pause on caught exceptions"; otherwise it will also pause on exceptions that aren't important because they're being intentionally handled by the system in some way.

@davisagli OK, here it is.

@rileydog Okay, so it sounds like your current situation is:

  1. Backend is running on http://localhost:8080/another%20plone%206
  2. Frontend is running on http://localhost:3000/
  3. The server side of Volto is successfully communicating with the backend (I can tell because your screenshot showed the content of the homepage).
  4. But when the client side of Volto tries to fetch the content and related endpoints directly from the backend, the browser blocks it due to cross-origin restrictions because it's coming from a different domain.

Does that sound accurate? That's why you get a flash of the content before it disappears.

I am surprised that this is happening. The docs that you linked include setting CORS_ALLOW_ORIGIN='*' while starting the backend container, which should avoid this problem. I tried the commands from the docs on my computer (which is a Mac), and the site works.

Could you show in more detail how you are starting the containers? Maybe there is some detail we can spot.

David, thanks for your continued help. This issue is intriguing.

Before i give you more info on my Windows installation, I want to let you know i tried installing on a hosted VPS server and i have the identical problem :frowning: So either Plone has a vendetta against me or i continue to do the same mistake.

  1. I installed on VPS
  2. i installed per: Containers – Install — Plone Documentation v6.0
  3. I added my user to the docker group to get rid of an error
  4. i went to (i own this domain and changed the record to point here.
  5. I got the identical result: login page displays but can’t login.

However, keying off your point of differeent domain, I tried the following.

  1. Originally I used: for the url to the login (I changed the DNS record). This worked in that it went to login page but couldn’t log in.
  2. Looking at the url the login page generated to the backend it was:
    a. The url to the backend had a different domain – I thought that might be the problem.
  3. Next, I used: (this is the IP assigned to my VPS)
    a. When I clicked ‘signin’ the url generated was:
    b. The url to the backend was still different than the signin url.
  4. Finally, after getting to the signin page, instead of clicking signin, I modified the url above and pasted it into Firefox. I used:
  5. attached is a screen shot from my server showing the docker screen

If you want to go into my VPS server, I'd be glad to give you login

Obviously none of these worked.

This is way beyond what I really understand, I’m just using logic.

Anyway, does any of this help?

Note: i easily installed a Plone 6 with classic

@rileydog Try these commands to start the 2 docker containers (instead of the commands shown in Containers – Install — Plone Documentation v6.0):

docker run --name plone6-backend -e SITE=Plone -d -p 8080:8080 plone/plone-backend:6.0

docker run --name plone6-frontend --link plone6-backend:backend -e RAZZLE_DEV_PROXY_API_PATH=http://backend:8080/Plone -d -p 3000:3000 plone/plone-frontend:latest

This is configuring Volto in a slightly different way so that all requests from the browser will go through the Volto server (on port 3000) before getting proxied to the Plone backend (on port 8080). That should avoid the cross-origin problems.

I am planning to update the docs (Simplify the introductory container installation docs by davisagli · Pull Request #1456 · plone/documentation · GitHub) but still checking some things.

David, Thanks! Worked perfectly.

@davisagli this also fixes the issue on Windows 10

OK proof i can mess up anything :frowning:

Yes, everything worked fine the first time. however, i wanted to try this again as once-in-a-row is not a trend.
So I:

  • stopped then deleted the Docker containers (front and rear)
  • ran the lines from your post.
  • confirmed images were created and started - all good.
  • went to the proper url and found the page to create Plone site
  • used "create plone site" this should create site using volto.
  • site created; however, instead of creating site with volto, it created a site with the warning "you are accessing the back end, you should use volto" (something like that) here: (
  • tried changing the port to 3000 got a "does not exist"

what have i missed?

@rileydog The second time you created a Plone site named themeadows instead of Plone, but Volto is still configured to look for a site named Plone. With this name, you need to change the command to start the frontend to:

docker run --name plone6-frontend --link plone6-backend:backend -e RAZZLE_DEV_PROXY_API_PATH=http://backend:8080/themeadows -d -p 3000:3000 plone/plone-frontend:latest

Yup, that was it. Thanks again

I believe your said your we going to modify the page: Containers – Install — Plone Documentation v6.0 with the revised code in the "Start Plone" section.

If so, please consider adding a line above this something to the effect: "The docker run code below is based on the name of the site being "Plone". If you named your site something different, please revise the code below by changing the name"

I realize experienced users such as yourself wouldn't make this rookie mistake; however, I obviously I did and others might.

The instructions were very easy to follow - thanks to the author.

@rileydog Good point. I'll try to make it clearer that -e SITE=Plone tells the plone-backend image to create a site named Plone, and that the frontend command assumes that such a site exists.