Create a Persistent Tableau Server Docker Container in 30 minutes

Pre-requisites:

  1. A linux machine you can use to build the container image. I have tested on both Amazon Linux 2 (RHEL/CENTOS based) and Ubuntu (incl. Ubuntu on Windows Subsystem for Linux — thanks Tim Payne!).
  2. Docker is installed and running on that machine
  3. A valid Tableau Server license
  4. ssh there and download the following:

Build the container:

  1. Uncompress the Container builder tool:
tar -xzf tableau-server-container-setup-tool-<VERSION>.tar.gz
{
"first_name" : "John",
"last_name" : "Smith",
"email" : "john.smith@example.com",
"company" : "Example, Inc",
"title" : "Head Cat Herder",
"department" : "Engineering",
"industry" : "Finance",
"company_employees" : "500",
"phone" : "123-555-1212",
"city" : "Kirkland",
"state" : "WA",
"zip" : "98034",
"country" : "United States",
"opt_in" : "true",
"eula" : "accept"
}
#!/bin/bash
# Driver installation and other artifact installation script
mkdir -p /opt/tableau/tableau_driver/jdbc
cp /docker/customer-files/postgresql-42.3.3.jar /opt/tableau/tableau_driver/jdbc/postgresql-42.3.3.jaryum install -y /docker/customer-files/mysql-connector-odbc-8.0.26-1.el7.x86_64.rpm
TABLEAU_USERNAME=admin
TABLEAU_PASSWORD=admin
TSM_REMOTE_UID=1010
TSM_REMOTE_USERNAME=tsmadmin
./build-image --accepteula -i tableau-server-<VERSION>.rpm -e env.txt

Running the container

  1. Run this command to prepare the docker env that will be running the container:
sudo ./configure-container-host -u 999
docker volume create ts_container_data
my-craz1-sTrong-k€y-noOne-Can-gUes$
docker run \
-e LICENSE_KEY=<lincense-key> \
-e TABLEAU_USERNAME=admin \
-e TABLEAU_PASSWORD=admin \
-v ts_container_data:/var/opt/tableau \
-v <absolute-path>/remote-user-secret:/docker/config/remote-user-secret \
--hostname=localhost \
-p 8080:8080 \
-p 8850:8850 \
-d <container-image-id>
  • Sign in to the TSM Gui via browser: https://<container-ip-address>:8850
  • docker ps → show all running containers
  • docker ps -a → show all containers
  • docker logs <container-id> → did anything go wrong?
  • docker stats → see all the cpu/mem/etc from the varius running containers. If Tableau Server is initializing, you will see a lot of activity here.
  • docker exec -it <container-id> tsm status -v → check if Tableau is initializing or has initialized properly
  • docker exec -it <container-id> bash → now you are logged on the console of the container, so you can run any linux command, e.g. tsm status or even install db drivers.
  • docker exec -it <container-name> bash -c ‘cat $DATA_DIR/supervisord/run-tableau-server.log’ → this helps you check for errors during a fresh startup
  • Other files and troubleshooting ideas here on Tableau’s official manual.
http://<ip-address>:8080
https://<ip-address>:8850
docker run \
-v ts_container_data:/var/opt/tableau \
--hostname=localhost \
-p 8080:8080 \
-p 8850:8850 \
-d <container-image-id>
docker run \
-v ts_container_data:/var/opt/tableau \
-v {absolute-path}/remote-user-secret:/docker/config/remote-user-secret \
--hostname=localhost \
-p 8080:8080 \
-p 8850:8850 \
-d <container-image-id>

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

How to setup Idempotent APIs in Laravel

How I Gave My Office A Digital Beating Heart​ For Valentine’s Day

Tax payable posting to vendor account

Adapter Audio Converter For Mac

Rails Project Build Part 1

This LOKI is from open-source world

Manage AWS CLI for multiple accounts

API Key and Usage Plan Integration with AWS API Gateway

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alex Eskinasy

Alex Eskinasy

Data Geek

More from Medium

IBM Cloud Pak for Data Installation

Dash application on AWS Elasticbean Stalk with internal css, images and data

How to start with Apache Airflow in a MWAA look-alike docker (Mac OS)

GCP Big Query — Writing my first Python Connector