├── .dockerignore ├── .editorconfig ├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── publish-image.yaml │ └── tests.yaml ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── docker-mumble.png └── files ├── config.ini ├── run.sh └── supw /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | LICENSE 3 | Makefile 4 | README.md 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_size = 4 6 | indent_style = space 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | 10 | [Makefile] 11 | indent_style = tab 12 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: PHLAK 2 | patreon: PHLAK 3 | custom: https://paypal.me/ChrisKankiewicz 4 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: docker 4 | directory: "/" 5 | schedule: 6 | interval: monthly 7 | timezone: US/Arizona 8 | open-pull-requests-limit: 10 9 | -------------------------------------------------------------------------------- /.github/workflows/publish-image.yaml: -------------------------------------------------------------------------------- 1 | name: Publish Image 2 | 3 | on: 4 | push: 5 | branches: ['master'] 6 | tags: ['*'] 7 | 8 | env: 9 | DOCKER_HUB_USER: phlak 10 | 11 | jobs: 12 | build-and-push: 13 | name: Build & Push 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout Repository 18 | uses: actions/checkout@v2 19 | 20 | - name: Log in to Docker Hub 21 | uses: docker/login-action@v1 22 | with: 23 | username: ${{ env.DOCKER_HUB_USER }} 24 | password: ${{ secrets.DOCKER_HUB_TOKEN }} 25 | 26 | - name: Extract Metadata 27 | id: extract-metadata 28 | uses: docker/metadata-action@v3 29 | with: 30 | images: ${{ env.DOCKER_HUB_USER }}/mumble 31 | tags: | 32 | type=raw,value=latest 33 | type=ref,event=tag 34 | 35 | - name: Build & Push Image 36 | uses: docker/build-push-action@v2 37 | with: 38 | push: ${{ github.event_name != 'pull_request' }} 39 | tags: ${{ steps.extract-metadata.outputs.tags }} 40 | labels: ${{ steps.extract-metadata.outputs.labels }} 41 | -------------------------------------------------------------------------------- /.github/workflows/tests.yaml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: [pull_request_target] 4 | 5 | jobs: 6 | build-image: 7 | name: Build Image 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - name: Checkout Repository 12 | uses: actions/checkout@v2 13 | 14 | - name: Build Image 15 | run: make build 16 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.15.4 2 | LABEL maintainer="Chris Kankiewicz " 3 | 4 | # Define Mumble version 5 | ARG MUMBLE_VERSION=1.3.4 6 | 7 | # Define environment variables 8 | ENV CONFIG_PATH=/etc/mumble/config.ini 9 | 10 | # Create Mumble directories 11 | RUN mkdir -pv /opt/mumble /etc/mumble 12 | 13 | # Create non-root user 14 | RUN adduser -DHs /sbin/nologin mumble 15 | 16 | # Copy config file 17 | COPY files/config.ini /etc/mumble/config.ini 18 | 19 | # Copy run script 20 | COPY files/run.sh /opt/mumble/run.sh 21 | 22 | # Copy SuperUser password update script 23 | COPY files/supw /usr/local/bin/supw 24 | RUN chmod +x /usr/local/bin/supw 25 | 26 | # Set the bzip archive URL 27 | ARG BZIP_URL=https://github.com/mumble-voip/mumble/releases/download/${MUMBLE_VERSION}/murmur-static_x86-${MUMBLE_VERSION}.tar.bz2 28 | 29 | # Install dependencies, fetch Mumble bzip archive and chown files 30 | RUN apk add --update ca-certificates bzip2 su-exec tar tzdata wget \ 31 | && wget -qO- ${BZIP_URL} | tar -xjv --strip-components=1 -C /opt/mumble \ 32 | && apk del ca-certificates bzip2 tar wget && rm -rf /var/cache/apk/* \ 33 | && chown -R mumble:mumble /etc/mumble /opt/mumble 34 | 35 | # Expose ports 36 | EXPOSE 64738 64738/udp 37 | 38 | # Set running user 39 | USER mumble 40 | 41 | # Set volumes 42 | VOLUME /etc/mumble 43 | 44 | # Default command 45 | CMD ["/opt/mumble/run.sh"] 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Chris Kankiewicz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | IMAGE_NAME="phlak/mumble" 2 | IMAGE_TAG="$$(grep 'ARG MUMBLE_VERSION' Dockerfile | awk -F = '{print $$2}')" 3 | 4 | build: 5 | @docker build --force-rm --pull --tag $(IMAGE_NAME):$(IMAGE_TAG) . 6 | 7 | purge: 8 | @docker image rm --force $(IMAGE_NAME):$(IMAGE_TAG) 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | docker-mumble 2 | ============= 3 | 4 |

5 | Docker Mumble 6 |

7 | 8 |

9 | Join our Community 10 | Become a Sponsor 11 | One-time Donation 12 |
13 | Docker Image Version 14 | Docker Pulls 15 | Docker Cloud Build Status 16 | License 17 |

18 | 19 |

20 | Docker image for Mumble server. 21 |

22 | 23 | --- 24 | 25 | Running the Container 26 | --------------------- 27 | 28 | In order to persist configuration data when upgrading your container you should create a named data 29 | volume. This is not required but is _highly_ recommended. 30 | 31 | docker volume create --name mumble-data 32 | 33 | After the data volume has been created run the server container with the named data volume: 34 | 35 | docker run -d -p 64738:64738 -p 64738:64738/udp -v mumble-data:/etc/mumble --name mumble-server phlak/mumble 36 | 37 | #### Optional `docker run` arguments 38 | 39 |
40 |
-e SUPERUSER_PASSWORD=password
41 |
Set the superuser password for your server during container initialization.
42 |
43 | 44 |
45 |
-e TZ=America/Phoenix
46 |
Set the timezone for your server. You can find your timezone in this list of timezones. Use the (case sensitive) value from the TZ column. If left unset, timezone will be UTC.
47 |
48 | 49 |
50 |
--restart unless-stopped
51 |
Always restart the container regardless of the exit status, but do not start it on daemon startup if the container has been put to a stopped state before. See the Docker restart policies for additional details.
52 |
53 | 54 | SuperUser Password 55 | ------------------ 56 | 57 | After starting your container, you can manually set a new SuperUser password with: 58 | 59 | docker exec -it mumble-server supw 60 | 61 | > ℹ️ This can be run at any time to update the SuperUser password 62 | 63 | Or retrieve the randomly generated SuperUser password with: 64 | 65 | docker logs mumble-server 2>&1 | grep "Password for 'SuperUser'" 66 | Alternatively you may provide a SuperUser password during container creation using the `SUPERUSER_PASSWORD` environment variable (see the [Optional `docker run` arguments](#optional-docker-run-arguments) section above). 67 | 68 | Configuration 69 | ------------- 70 | 71 | Once you have a running container, you can edit the config with: 72 | 73 | docker exec -it mumble-server vi /etc/mumble/config.ini 74 | 75 | After saving changes, restart your container: 76 | 77 | docker restart mumble-server 78 | 79 | Troubleshooting 80 | --------------- 81 | 82 | For general help and support join our [GitHub Discussions](https://github.com/PHLAK/docker-mumble/discussions) or reach out on [Twitter](https://twitter.com/PHLAK). 83 | 84 | Please report bugs to the [GitHub Issue Tracker](https://github.com/PHLAK/docker-mumble/issues). 85 | 86 | Copyright 87 | --------- 88 | 89 | This project is licensed under the [MIT License](https://github.com/PHLAK/docker-mumble/blob/master/LICENSE). 90 | -------------------------------------------------------------------------------- /docker-mumble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PHLAK/docker-mumble/7c450af9178ffc9d09737b5cbf0522c7e3ae205e/docker-mumble.png -------------------------------------------------------------------------------- /files/config.ini: -------------------------------------------------------------------------------- 1 | # Murmur configuration file. 2 | # See https://wiki.mumble.info/wiki/Murmur.ini for more options 3 | 4 | # Path to database. If blank, will search for 5 | # murmur.sqlite in default locations or create it if not found. 6 | database=/etc/mumble/murmur.sqlite 7 | 8 | # If Murmur is started as root, which user should it switch to? 9 | # This option is ignored if Murmur isn't started with root privileges. 10 | uname=mumble 11 | -------------------------------------------------------------------------------- /files/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | if [[ ! -z ${SUPERUSER_PASSWORD} ]]; then 4 | /opt/mumble/murmur.x86 -ini ${CONFIG_PATH} -supw ${SUPERUSER_PASSWORD} 5 | fi 6 | 7 | exec /opt/mumble/murmur.x86 -fg -ini ${CONFIG_PATH} 8 | -------------------------------------------------------------------------------- /files/supw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | /opt/mumble/murmur.x86 -ini ${CONFIG_PATH} -readsupw 4 | --------------------------------------------------------------------------------