Apify Discord Mirror

Updated last week

Issue: Playwright-chrome Docker with pnpm

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.
Plain Text
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.
Plain Text
# 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
1
L
m
A
5 comments
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.
It seems the pnpm build which uses tsc is not running as expected, although typescript has been installed. home/myuser/dist is not created.
@mjh just advanced to level 1! Thanks for your contributions! ๐ŸŽ‰
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.
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
Add a reply
Sign up and join the conversation on Discord