Skip to content

Running the workshop in devcontainers #41

Closed
@Noriller

Description

@Noriller

I don't know who will need this (maybe even my future self), but I've been running everything in devcontainers, and only stumbled a little in setting things up for this one workshop (the others all ran fine).

The first test passed, so I believe the rest should also work, so I'm sharing what I found out to make this work.

This setup uses a container for the workshop and another for the playwright's "remote server" (on the same machine).

Do checkout the playwright docs: https://playwright.dev/docs/docker#remote-connection

In the workshop terminal

PW_TEST_CONNECT_WS_ENDPOINT=ws://$(ip route | grep default | awk '{print $3}'):3000/ npm run test:e2e:dev -- --ui-port=9292 --ui-host=0.0.0.0

Why not "docker.host.internal"?

PW_TEST_CONNECT_WS_ENDPOINT is from the docs.

Apparently, it refuses to connect. Using network=host is another option, and it is probably even easier (just pass it to devcontainers runArgs, then use localhost).
But this one works, getting the IP from the route, which is the "localhost" IP as seen from the container.

UI port/host

Without it, it fails. It searches for the playwright dependencies inside the container, but even without them, by passing those args, it will open the UI in a new page and work there.

In the Host Machine

docker run --network=host --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.47.0-noble /bin/sh -c "npx -y [email protected] run-server --port 3000 --host 0.0.0.0"

The command is from the docs. The only thing to pay attention to is the version being used (1.47): the workshop version should match the one to run the server (I'm also matching the server/docker to be sure).

If you use an unsupported version, it will complain about version mismatch; in which case, just adjust the versions.

For this one, I'm using network=host because the scripts would most likely overwrite the config. But since both are in Docker, you could pass the add-host flag and use whatever name you passed there.
The docs example is add-host=hostmachine:host-gateway, so in the tests, you would use hostmachine.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions