├── .github ├── FUNDING.yml └── workflows │ └── build-and-push.yml ├── Dockerfile.alpine ├── Dockerfile.debian ├── Dockerfile.ubuntu └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: traccar 2 | -------------------------------------------------------------------------------- /.github/workflows/build-and-push.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Build and push docker images 3 | 4 | env: 5 | DOCKERHUB_REPOSITORY: traccar/traccar 6 | 7 | on: 8 | push: 9 | branches: ["v[0-9]+.[0-9]+.[0-9]+"] 10 | 11 | defaults: 12 | run: 13 | shell: bash 14 | 15 | jobs: 16 | docker-build-push: 17 | name: Build and push docker images 18 | runs-on: ubuntu-24.04 19 | strategy: 20 | matrix: 21 | os: [alpine, debian, ubuntu] 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v4 25 | - name: Set up QEMU 26 | uses: docker/setup-qemu-action@v3 27 | - name: Set up Docker Buildx 28 | uses: docker/setup-buildx-action@v3 29 | - name: Login to Docker Hub 30 | uses: docker/login-action@v3 31 | with: 32 | username: ${{ secrets.DOCKERHUB_USERNAME }} 33 | password: ${{ secrets.DOCKERHUB_TOKEN }} 34 | - name: Set environment DOCKERHUB_IMAGE_TAGS 35 | if: github.ref != 'refs/heads/master' 36 | run: | 37 | _VERSION=${GITHUB_REF_NAME#v*} 38 | _VERSION_MAJOR_MINOR=${_VERSION%.*} 39 | _VERSION_MAJOR=${_VERSION_MAJOR_MINOR%.*} 40 | _DOCKERHUB_IMAGE_TAGS="$DOCKERHUB_REPOSITORY:$_VERSION-${{ matrix.os }}" 41 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:$_VERSION_MAJOR_MINOR-${{ matrix.os }}" 42 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:$_VERSION_MAJOR-${{ matrix.os }}" 43 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:${{ matrix.os }}" 44 | if [ "${{ matrix.os }}" == "alpine" ]; then 45 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:$_VERSION" 46 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:$_VERSION_MAJOR_MINOR" 47 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:$_VERSION_MAJOR" 48 | _DOCKERHUB_IMAGE_TAGS+=",$DOCKERHUB_REPOSITORY:latest" 49 | fi 50 | echo "DOCKERHUB_IMAGE_TAGS=$_DOCKERHUB_IMAGE_TAGS" >> $GITHUB_ENV 51 | echo "VERSION=$_VERSION" >> $GITHUB_ENV 52 | - name: Set environment DOCKERHUB_IMAGE_PLATFORMS 53 | run: | 54 | _DOCKERHUB_IMAGE_PLATFORMS="linux/amd64,linux/arm64" 55 | if [ "${{ matrix.os }}" == "ubuntu" ]; then 56 | _DOCKERHUB_IMAGE_PLATFORMS+=",linux/arm/v7" 57 | fi 58 | echo "DOCKERHUB_IMAGE_PLATFORMS=$_DOCKERHUB_IMAGE_PLATFORMS" >> $GITHUB_ENV 59 | - name: Build and push 60 | if: env.DOCKERHUB_IMAGE_TAGS != '' 61 | uses: docker/build-push-action@v6 62 | with: 63 | file: Dockerfile.${{ matrix.os }} 64 | tags: ${{ env.DOCKERHUB_IMAGE_TAGS }} 65 | labels: org.opencontainers.image.version=${{ env.VERSION }} 66 | platforms: ${{ env.DOCKERHUB_IMAGE_PLATFORMS }} 67 | push: true 68 | -------------------------------------------------------------------------------- /Dockerfile.alpine: -------------------------------------------------------------------------------- 1 | FROM alpine:3.21 2 | 3 | ENV TRACCAR_VERSION=6.7.1 4 | 5 | WORKDIR /opt/traccar 6 | 7 | RUN set -ex; \ 8 | apk add --no-cache --no-progress \ 9 | openjdk17-jre-headless \ 10 | wget; \ 11 | wget -qO /tmp/traccar.zip https://github.com/traccar/traccar/releases/download/v$TRACCAR_VERSION/traccar-other-$TRACCAR_VERSION.zip; \ 12 | unzip -qo /tmp/traccar.zip -d /opt/traccar; \ 13 | rm /tmp/traccar.zip; \ 14 | apk del wget 15 | 16 | ENTRYPOINT ["java", "-Xms1g", "-Xmx1g", "-Djava.net.preferIPv4Stack=true"] 17 | 18 | CMD ["-jar", "tracker-server.jar", "conf/traccar.xml"] 19 | -------------------------------------------------------------------------------- /Dockerfile.debian: -------------------------------------------------------------------------------- 1 | FROM debian:12-slim 2 | 3 | ENV TRACCAR_VERSION=6.7.1 4 | 5 | WORKDIR /opt/traccar 6 | 7 | RUN set -ex; \ 8 | apt-get update; \ 9 | TERM=xterm DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ 10 | openjdk-17-jre-headless \ 11 | unzip \ 12 | wget; \ 13 | wget -qO /tmp/traccar.zip https://github.com/traccar/traccar/releases/download/v$TRACCAR_VERSION/traccar-other-$TRACCAR_VERSION.zip; \ 14 | unzip -qo /tmp/traccar.zip -d /opt/traccar; \ 15 | apt-get autoremove --yes unzip wget; \ 16 | apt-get clean; \ 17 | rm -rf /var/lib/apt/lists/* /tmp/* 18 | 19 | ENTRYPOINT ["java", "-Xms1g", "-Xmx1g", "-Djava.net.preferIPv4Stack=true"] 20 | 21 | CMD ["-jar", "tracker-server.jar", "conf/traccar.xml"] 22 | -------------------------------------------------------------------------------- /Dockerfile.ubuntu: -------------------------------------------------------------------------------- 1 | FROM ubuntu:24.04 2 | 3 | ENV TRACCAR_VERSION=6.7.1 4 | 5 | WORKDIR /opt/traccar 6 | 7 | RUN set -ex; \ 8 | apt-get update; \ 9 | TERM=xterm DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ 10 | openjdk-17-jre-headless \ 11 | unzip \ 12 | wget; \ 13 | wget -qO /tmp/traccar.zip https://github.com/traccar/traccar/releases/download/v$TRACCAR_VERSION/traccar-other-$TRACCAR_VERSION.zip; \ 14 | unzip -qo /tmp/traccar.zip -d /opt/traccar; \ 15 | apt-get autoremove --yes unzip wget; \ 16 | apt-get clean; \ 17 | rm -rf /var/lib/apt/lists/* /tmp/* 18 | 19 | ENTRYPOINT ["java", "-Xms1g", "-Xmx1g", "-Djava.net.preferIPv4Stack=true"] 20 | 21 | CMD ["-jar", "tracker-server.jar", "conf/traccar.xml"] 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Traccar in Docker 2 | --- 3 | 4 | **Traccar GPS Tracking System in Docker image.** 5 | 6 | Official website: 7 | DockerHub image: ![](https://img.shields.io/docker/stars/traccar/traccar) ![](https://img.shields.io/docker/pulls/traccar/traccar) 8 | Maintainer: [Maxim Zalysin](https://github.com/magna-z) 9 | 10 | ## Available tags: 11 | #### 6.X.X 12 | - **6.7.1-alpine**, **6-alpine**, **alpine**, **6.7.1**, **6.7**, **6**, **latest** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.7.1-alpine) 13 | - **6.7.1-debian**, **6-debian**, **6.7-debian**, **debian** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.7.1-debian) 14 | - **6.7.1-ubuntu**, **6-ubuntu**, **6.7-ubuntu**, **ubuntu** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.7.1-ubuntu) 15 | - **6.7.0-alpine**, **6.7.0** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.7.0-alpine) 16 | - **6.7.0-debian** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.7.0-debian) 17 | - **6.7.0-ubuntu** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.7.0-ubuntu) 18 | #### 6.X 19 | - **6.6-alpine**, **6.6** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.6-alpine) 20 | - **6.6-debian** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.6-debian) 21 | - **6.6-ubuntu** ![](https://img.shields.io/docker/image-size/traccar/traccar/6.6-ubuntu) 22 | - ... 23 | - **6.0**, **6.0-alpine**, **6.0-debian**, **6.0-ubuntu** 24 | #### 5.X 25 | - **5.12-alpine**, **5-alpine**, **5.12**, **5** ![](https://img.shields.io/docker/image-size/traccar/traccar/5.12-alpine) 26 | - **5.12-debian**, **5-debian** ![](https://img.shields.io/docker/image-size/traccar/traccar/5.12-debian) 27 | - **5.12-ubuntu**, **5-ubuntu** ![](https://img.shields.io/docker/image-size/traccar/traccar/5.12-ubuntu) 28 | - ... 29 | - **5.0**, **5.0-alpine**, **5.0-debian**, **5.0-ubuntu** 30 | #### 4.X 31 | - **4.15**, **4.15-alpine**, **4.15-debian**, **4.15-ubuntu** 32 | - ... 33 | - **4.0**, **4.0-alpine**, **4.0-debian** 34 | #### 3.X 35 | - **3.17**, **3.17-alpine**, **3.17-debian** 36 | - **3.16**, **3.16-alpine**, **3.16-debian** 37 | 38 | ## Available multi-platform images: 39 | **Alpine based**: linux/amd64, linux/arm64 40 | **Debian based**: linux/amd64, linux/arm64 41 | **Ubuntu based**: linux/amd64, linux/arm64, linux/arm/v7 42 | 43 | ## Container create example: 44 | 1. **Create work directories:** 45 | ```bash 46 | mkdir -p /opt/traccar/logs 47 | ``` 48 | 49 | 1. **Get default traccar.xml:** 50 | ```bash 51 | docker run \ 52 | --rm \ 53 | --entrypoint cat \ 54 | traccar/traccar:latest \ 55 | /opt/traccar/conf/traccar.xml > /opt/traccar/traccar.xml 56 | ``` 57 | 58 | 1. **Edit traccar.xml:** 59 | 60 | 1. **Create container:** 61 | ```bash 62 | docker run \ 63 | --name traccar \ 64 | --hostname traccar \ 65 | --detach --restart unless-stopped \ 66 | --publish 80:8082 \ 67 | --publish 5000-5150:5000-5150 \ 68 | --publish 5000-5150:5000-5150/udp \ 69 | --volume /opt/traccar/logs:/opt/traccar/logs:rw \ 70 | --volume /opt/traccar/traccar.xml:/opt/traccar/conf/traccar.xml:ro \ 71 | --volume /opt/traccar/data:/opt/traccar/data:rw \ 72 | traccar/traccar:latest 73 | ``` 74 | 75 | ## Database 76 | The default when executing the above `docker run` command is an internal H2 database but this should only be for basic use. 77 | 78 | The **recommended solution** for production use is to link to an external MySQL database and update the configuration `.xml`-file according to the [Traccar MySQL documentation](https://www.traccar.org/mysql/) and using the `docker run` command as-is. 79 | 80 | ## Default JVM options: 81 | - `-Xms1g` 82 | - `-Xmx1g` 83 | - `-Djava.net.preferIPv4Stack=true` 84 | --------------------------------------------------------------------------------