Navid61 opened a new issue, #33686:
URL: https://github.com/apache/superset/issues/33686
### Bug description
```markdown
When building **Superset** from source using **Docker Compose**
(`docker-compose-non-dev.yml`), the build process fails during the `npm ci`
step due to **Puppeteer** being unable to download Chrome/Chromium.
This happens even though `PUPPETEER_SKIP_DOWNLOAD=true` is set in both the
`.env` file and the **Docker Compose** environment sections for all
Superset-related services.
## Reproduction Steps
1. Clone the latest **Superset** repository.
2. Prepare the following files:
- `.env` in the `docker/` directory (with `PUPPETEER_SKIP_DOWNLOAD=true`
and production settings).
- `docker-compose-non-dev.yml` (see "additional context" for full config).
3. Run:
```bash
export PUPPETEER_SKIP_DOWNLOAD=true
docker compose -f docker-compose-non-dev.yml up -d --build
```
4. The build fails at the frontend step with:
```vbnet
npm error Error: Failed to set up chrome-headless-shell v127.0.6533.88!
Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.
```
## Expected Behavior
The build should respect `PUPPETEER_SKIP_DOWNLOAD=true` set in the
environment and skip downloading Chrome/Chromium during build, or there should
be documentation clarifying how to skip this in Docker-based builds.
## Actual Behavior
Build fails with Puppeteer download error (403 Forbidden from
`storage.googleapis.com`).
The error message instructs to set the `PUPPETEER_SKIP_DOWNLOAD` env
variable, but doing so in `.env`, `docker-compose-non-dev.yml`, and even the
shell before building does not resolve the problem.
```
### Screenshots/recordings

### Superset version
4.1.2
### Python version
3.11
### Node version
18 or greater
### Browser
Not applicable
### Additional context
Superset version: Latest master (as of 2025-06-04)
Python version: 3.11 (docker image: python:3.11.12-slim-bookworm)
Node version: 20 (node:20-bookworm-slim)
OS: Debian 12
Browser: N/A (error during build, not at runtime)
docker info:
docker info
✔ │
Client:
Context: default
Debug Mode: false
Plugins:
compose: Docker Compose (Docker Inc., v2.36.2)
Server:
Containers: 4
Running: 3
Paused: 0
Stopped: 1
Images: 6
Server Version: 20.10.24+dfsg1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries
splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 1.6.20~ds1-1+deb12u1
runc version: 1.1.5+ds1-1+deb12u1
init version:
Security Options:
apparmor
seccomp
Profile: default
cgroupns
Kernel Version: 6.1.0-37-amd64
Operating System: Debian GNU/Linux 12 (bookworm)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 15.24GiB
Name: Survey
ID: WZ4N:2XOB:7OMA:C7BZ:OHI3:R3HK:AN2A:XRTN:MKTF:UEC6:B5QR:5C6U
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
cat docker/.env
✔
PYTHONUNBUFFERED=1
COMPOSE_PROJECT_NAME=superset
# --- Security ---
DEV_MODE=false
FLASK_DEBUG=false
SUPERSET_ENV=production
# --- Superset settings ---
SUPERSET_APP_ROOT="/"
SUPERSET_LOAD_EXAMPLES=yes # Loads example dashboards
SUPERSET_PORT=8088
SUPERSET_LOG_LEVEL=info
# --- Secret key: change this! ---
SUPERSET_SECRET_KEY=******
# Generate one: openssl rand -base64 42
# --- Database settings: change these passwords! ---
DATABASE_DB=superset
DATABASE_HOST=db
DATABASE_PORT=5432
DATABASE_USER=superset
DATABASE_PASSWORD=*******
POSTGRES_DB=superset
POSTGRES_USER=superset
POSTGRES_PASSWORD=*******
DATABASE_DIALECT=postgresql
# --- Redis ---
REDIS_HOST=redis
REDIS_PORT=6379
# --- External APIs (optional) ---
MAPBOX_API_KEY=
# --- Dev settings (disable in prod) ---
CYPRESS_CONFIG=false
ENABLE_PLAYWRIGHT=false
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
BUILD_SUPERSET_FRONTEND_IN_DOCKER=true
# --- Examples DB (not used in prod) ---
EXAMPLES_DB=
EXAMPLES_HOST=
EXAMPLES_USER=
EXAMPLES_PASSWORD=
EXAMPLES_PORT=
```yaml
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# -----------------------------------------------------------------------
# We don't support docker compose for production environments.
# If you choose to use this type of deployment make sure to
# create you own docker environment file (docker/.env) with your own
# unique random secure passwords and SECRET_KEY.
# -----------------------------------------------------------------------
x-superset-volumes:
&superset-volumes # /app/pythonpath_docker will be appended to the
PYTHONPATH in the final container
- ./docker:/app/docker
- /opt/superset/logs:/app/superset_home/logs
- /opt/superset/uploads:/app/superset_home/uploads
x-common-build: &common-build
context: .
target: dev
cache_from:
- apache/superset-cache:3.10-slim-bookworm
services:
redis:
image: redis:7
container_name: superset_cache
restart: unless-stopped
volumes:
- /opt/superset/redis:/data
db:
env_file:
- path: docker/.env # default
required: true
- path: docker/.env-local # optional override
required: false
image: postgres:16
container_name: superset_db
restart: unless-stopped
volumes:
- /opt/superset/db:/var/lib/postgresql/data
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
superset:
env_file:
- path: docker/.env # default
required: true
- path: docker/.env-local # optional override
required: false
build:
<<: *common-build
container_name: superset_app
command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
user: "root"
restart: unless-stopped
ports:
- 8088:8088
depends_on:
superset-init:
condition: service_completed_successfully
volumes: *superset-volumes
environment:
SUPERSET_LOG_LEVEL: "${SUPERSET_LOG_LEVEL:-info}"
PUPPETEER_SKIP_DOWNLOAD: "true"
superset-init:
container_name: superset_init
build:
<<: *common-build
command: ["/app/docker/docker-init.sh"]
env_file:
- path: docker/.env # default
required: true
- path: docker/.env-local # optional override
required: false
depends_on:
db:
condition: service_started
redis:
condition: service_started
user: "root"
volumes: *superset-volumes
healthcheck:
disable: true
environment:
SUPERSET_LOAD_EXAMPLES: "${SUPERSET_LOAD_EXAMPLES:-yes}"
SUPERSET_LOG_LEVEL: "${SUPERSET_LOG_LEVEL:-info}"
PUPPETEER_SKIP_DOWNLOAD: "true"
superset-worker:
build:
<<: *common-build
container_name: superset_worker
command: ["/app/docker/docker-bootstrap.sh", "worker"]
env_file:
- path: docker/.env # default
required: true
- path: docker/.env-local # optional override
required: false
restart: unless-stopped
depends_on:
superset-init:
condition: service_completed_successfully
user: "root"
volumes: *superset-volumes
healthcheck:
test:
[
"CMD-SHELL",
"celery -A superset.tasks.celery_app:app inspect ping -d
celery@$$HOSTNAME",
]
environment:
SUPERSET_LOG_LEVEL: "${SUPERSET_LOG_LEVEL:-info}"
PUPPETEER_SKIP_DOWNLOAD: "true"
superset-worker-beat:
build:
<<: *common-build
container_name: superset_worker_beat
command: ["/app/docker/docker-bootstrap.sh", "beat"]
env_file:
- path: docker/.env # default
required: true
- path: docker/.env-local # optional override
required: false
restart: unless-stopped
depends_on:
superset-init:
condition: service_completed_successfully
user: "root"
volumes: *superset-volumes
healthcheck:
disable: true
environment:
SUPERSET_LOG_LEVEL: "${SUPERSET_LOG_LEVEL:-info}"
PUPPETEER_SKIP_DOWNLOAD: "true"
```
### Checklist
- [x] I have searched Superset docs and Slack and didn't find a solution to
my problem.
- [x] I have searched the GitHub issue tracker and didn't find a similar bug
report.
- [x] I have checked Superset's logs for errors and if I found a relevant
Python stacktrace, I included it here as text in the "additional context"
section.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]