Tableau Server Pre-Built Docker Image
Introduction
Beginning in version 2026.3.0, Tableau provides pre-built Docker images for Tableau Server in a Container and publishes them to Docker Hub. Instead of building an image yourself with the setup tool and the Tableau Server installer, you can download these images directly. The setup tool is still published for every release and is preferable for customers who need more customization for their image.
For more information about Tableau Server in a Container, see Tableau Server in a Container. For details about using a Docker image, see Tableau Server in a Container - Using an Image.
Prerequisites
Tableau Server must licensed with a Server+ license. For more information, see About Tableau Server+.
Limitations
- The base image used is
redhat/ubi9. It cannot be changed. - Any drivers, certificates, and other files needed should be mounted during runtime.
- Some drivers cannot be mounted; they must be installed. To install them, extend this image and run a
docker build. - To add anything to an image that requires root access, extend this image and run a
docker build.
Download the Images
- The Tableau Server in a Container images are available to download from our Docker Hub repository(Link opens in a new window).
Use and deploy these images just as you would images created using the Setup program. For details, see Tableau Server in a Container, Tableau Server in a Container - Using the Setup Tool, and Tableau Server in a Container - Using an Image.
Note: Customers accept the EULA while building the Tableau Server Docker image. Because Tableau builds these pre-built images, you must accept the EULA at runtime. To do so, set the environment variable ACCEPTEULA=1.
Install drivers at run-time
The following example shows how to mount JDBC drivers at run-time. If you need to make more changes to the image (adding other drivers or certificates), you may want to build your own image using the setup tool. For more information, see Tableau Server in a Container - Using the Setup Tool.
Install a JDBC Driver
You can add a JDBC driver by mounting the driver files at run-time. You can also do so by copying them into an extended image.
Mount at Runtime
docker run \ -e LICENSE_KEY=<key> -e ACCEPTEULA=1 -p 8080:8080 -d <Tableau Server in a Container image ID or tag> --volume <dir-with-driver-jars>:/opt/tableau/tableau_server/packages/drivers:ro
Extending the pre-built image
The following examples show how to extend the pre-built image to add drivers and certificates. If you need to make more changes to the image, you may want to build your own image using the setup tool. For more information, see Tableau Server in a Container - Using the Setup Tool.
Install a JDBC Driver
Use a dockerfile to install JDBC drivers
This template installed JDBC drivers in the container.
# Template: Install JDBC Drivers in Tableau Server Container
#
# This template shows how to add JDBC drivers (Oracle, PostgreSQL, etc.)
# to a Tableau Server container.
#
# Usage:
# 1. Place JDBC .jar files in ./drivers/ directory
# 2. Build: docker build --build-arg BASE_IMAGE=<base-image> -f 02-jdbc-drivers.Dockerfile -t tableau-server:jdbc .
# 3. Run: docker run -e LICENSE_KEY=... -e TABLEAU_USERNAME=... -e TABLEAU_PASSWORD_FILE=/etc/tableau-admin-secret \
# -v /path/to/password-file:/etc/tableau-admin-secret -p 8080:8080 -d tableau-server:jdbc
ARG BASE_IMAGE=<your-tableau-server-image>
FROM ${BASE_IMAGE}
# Switch to root to create directories and copy files
USER root
# Create directory for JDBC drivers
# Tableau Server looks for drivers in specific locations
RUN mkdir -p /opt/tableau/tableau_driver/jdbc
# Copy JDBC driver JAR files
# Place your .jar files in a ./drivers/ directory before building
COPY ./drivers/*.jar /opt/tableau/tableau_driver/jdbc/
# Set proper ownership and permissions for JDBC drivers
RUN chown -R tableau:tableau /opt/tableau/tableau_driver/jdbc && \
chmod 644 /opt/tableau/tableau_driver/jdbc/*.jar
# Switch back to tableau user
USER tableau
# Alternative approach - mount at runtime:
# docker run -v /host/drivers:/opt/tableau/tableau_server/jdbc:ro ...
Set up a remote TSM user
This template creates an additional user who can remotely administer Tableau Server through TSM (Tableau Services Manager).
# This template creates an additional user who can remotely administer
# Tableau Server via TSM (Tableau Services Manager).
#
# Usage:
# 1. Review and modify the username/UID/GID as needed (build args)
# 2. Build: docker build --build-arg BASE_IMAGE=<base-image> -f 03-remote-tsm-user.Dockerfile -t tableau-server:remote-admin .
# 3. Run: docker run -e LICENSE_KEY=... -e TABLEAU_USERNAME=... -e TABLEAU_PASSWORD_FILE=/etc/tableau-admin-secret \
# -v /path/to/password-file:/etc/tableau-admin-secret -p 8080:8080 -d tableau-server:remote-admin
#
# The TSM admin user can execute TSM commands:
# docker exec -u tsm-admin <container-id> tsm status
ARG BASE_IMAGE=<your-tableau-server-image>
FROM ${BASE_IMAGE}
# Switch to root to create user
USER root
# Create a remote administrative user
# Customize these values for your environment:
ARG ADMIN_USERNAME=tsm-admin
ARG ADMIN_UID=2000
ARG ADMIN_GID=2000
# Create group and user
RUN groupadd -g ${ADMIN_GID} ${ADMIN_USERNAME} && \
useradd -m -u ${ADMIN_UID} -g ${ADMIN_GID} -s /bin/bash ${ADMIN_USERNAME}
# Add the user to the tsmadmin group
# This group has permissions to run TSM commands
RUN usermod -aG tsmadmin ${ADMIN_USERNAME}
# Optional: Set up sudo access for administrative tasks
# Uncomment if you need full sudo access:
# RUN dnf install -y sudo && \
# echo "${ADMIN_USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/${ADMIN_USERNAME} && \
# chmod 0440 /etc/sudoers.d/${ADMIN_USERNAME}
# Optional: Copy SSH keys for remote access
# COPY ./ssh/authorized_keys /home/${ADMIN_USERNAME}/.ssh/authorized_keys
# RUN chown -R ${ADMIN_USERNAME}:${ADMIN_USERNAME} /home/${ADMIN_USERNAME}/.ssh && \
# chmod 700 /home/${ADMIN_USERNAME}/.ssh && \
# chmod 600 /home/${ADMIN_USERNAME}/.ssh/authorized_keys
# Switch back to tableau user (default)
USER tableau
# To use the TSM admin user, exec into container as that user:
# docker exec -it -u tsm-admin <container-id> bash
# docker exec -u tsm-admin <container-id> tsm status
Configure External SSL with Tableau Server
This template copies SSL certificate and key files into the container. After the server is running, configure SSL using tsm commands.
# This template copies SSL certificate and key files into the container.
# After the server is running, SSL is configured using tsm commands via the test script.
#
# Usage:
# 1. Place certificate files in ./certs/ directory:
# - server-cert.crt (certificate file)
# - server-key.key (private key file)
# 2. Build: docker build --build-arg BASE_IMAGE=<base-image> -f 04-ssl-certificates.Dockerfile -t tableau-server:with-ssl .
# 3. Run: docker run -e LICENSE_KEY=... -e TABLEAU_USERNAME=... -e TABLEAU_PASSWORD_FILE=/etc/tableau-admin-secret \
# -v /path/to/password-file:/etc/tableau-admin-secret -p 8443:8443 -p 8080:8080 -d tableau-server:with-ssl
# 4. After server is running, configure SSL using:
# tsm security external-ssl enable --cert-file /opt/tableau/ssl/server-cert.crt --key-file /opt/tableau/ssl/server-key.key
# tsm pending-changes apply
ARG BASE_IMAGE=<your-tableau-server-image>
FROM ${BASE_IMAGE}
# Switch to root to copy SSL files
USER root
# Create directory for SSL certificates
RUN mkdir -p /opt/tableau/ssl && \
chown tableau:tableau /opt/tableau/ssl && \
chmod 755 /opt/tableau/ssl
# Copy SSL certificate and key files
COPY certs/server-cert.crt /opt/tableau/ssl/server-cert.crt
COPY certs/server-key.key /opt/tableau/ssl/server-key.key
# Set proper permissions (readable by tableau user)
RUN chown tableau:tableau /opt/tableau/ssl/server-cert.crt /opt/tableau/ssl/server-key.key && \
chmod 644 /opt/tableau/ssl/server-cert.crt && \
chmod 600 /opt/tableau/ssl/server-key.key
# Switch back to tableau user
USER tableau
