Issue: Playwright-chrome Docker with pnpm
# crawlee-js
m
Hello! I'm trying to run the actor using pnpm instead of npm. In my local, running
pnpm run start:dev
,
pnpm run start:prod
and
apify run
works as expected.
apify push
is also successful. But, when running the actor in the platform, my main command is not executed, and these are the only logs.
Copy code
2025-02-10T02:15:51.348Z ACTOR: Pulling Docker image of build ulyHJWVbZ9m9RZ8Ss from repository.
2025-02-10T02:16:04.019Z ACTOR: Creating Docker container.
2025-02-10T02:16:04.753Z ACTOR: Starting Docker container.
Here is my dockerfile.
Copy code
# Base image with Playwright
FROM apify/actor-node-playwright-chrome:20 AS builder

# Install pnpm
RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.bashrc" SHELL="$(which bash)" bash -

# Use the shell form of RUN to source the .bashrc file before running pnpm
SHELL ["/bin/bash", "-c", "source /home/myuser/.bashrc"]

# Check preinstalled packages
RUN pnpm ls crawlee apify puppeteer playwright

# Copy package files first to optimize caching
COPY package*.json ./

# Install dependencies
RUN pnpm install --frozen-lockfile --audit=false

# Copy source code
COPY . ./

# Ensure correct permissions
RUN chown -R myuser:myuser .

# Build the project
RUN pnpm run build

# Final runtime image
FROM apify/actor-node-playwright-chrome:20 AS runner

# Install pnpm
RUN wget -qO- https://get.pnpm.io/install.sh | ENV="/home/myuser/.bashrc" SHELL="$(which bash)" bash -

# Use the shell form of RUN to source the .bashrc file before running pnpm
SHELL ["/bin/bash", "-c", "source /home/myuser/.bashrc"]

# Copy built application from builder
COPY --from=builder /home/myuser /home/myuser

# Set up user and working directory
USER myuser
WORKDIR /home/myuser

# Install dependencies
RUN pnpm install --frozen-lockfile --audit=false 

# Run the image. If you know you won't need headful browsers,
# you can remove the XVFB start script for a micro perf gain.
CMD ./start_xvfb_and_run_cmd.sh && pnpm run start:prod --silent
h
Someone will reply to you shortly. In the meantime, this might help:
l
Hi @mjh Could you please try adding
ENV PATH="/home/myuser/.local/share/pnpm:$PATH"
For both the builder and runner stages, bellow the wget line.
m
It seems the
pnpm build
which uses
tsc
is not running as expected, although typescript has been installed.
home/myuser/dist
is not created.
a
@mjh just advanced to level 1! Thanks for your contributions! 🎉
l
You could also try using corepack instead of manually downloading pnpm. Just run
corepack enable
and make sure to have
packageManager
field in the
package.json
file.
t
I think it appears that the main command isn’t being executed on the platform, possibly due to shell configuration issues or misconfigured execution commands in the Dockerfile. I recommend simplifying the shell configuration by directly installing pnpm without relying on sourcing .bashrc, which might not be applied correctly during container runtime. Additionally, ensure that the start:prod script is correctly defined in your package.json and verify it works within the container by adding debugging statements. You can also check the Docker logs to ensure that the expected command is invoked correctly. Lastly, ensure pnpm is installed and accessible by confirming its version during the build process. I hope it will be helpful
2 Views