From 3720da6386759488f7a913b6cc5f75abd7c5b1f1 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:18:13 +0000 Subject: [PATCH 01/13] Using distroless base image for Docker --- Dockerfile | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9590070b..05dde755 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,3 @@ -FROM bufbuild/buf:1.0.0-rc6 as buf - FROM golang:1.17.1-bullseye AS build ENV GOPATH /go WORKDIR /go/src/headscale @@ -12,15 +10,10 @@ COPY . . RUN go install -a -ldflags="-extldflags=-static" -tags netgo,sqlite_omit_load_extension ./cmd/headscale RUN test -e /go/bin/headscale -FROM ubuntu:20.04 +FROM gcr.io/distroless/base -RUN apt-get update \ - && apt-get install -y ca-certificates \ - && update-ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -COPY --from=build /go/bin/headscale /usr/local/bin/headscale +COPY --from=build /go/bin/headscale /headscale ENV TZ UTC EXPOSE 8080/tcp -CMD ["headscale"] +CMD ["/headscale"] From a6d487de0099d1aaf8dbf05de69028c81c72a2ac Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:19:56 +0000 Subject: [PATCH 02/13] Using debian11-based distroless image --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 05dde755..8a201420 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ COPY . . RUN go install -a -ldflags="-extldflags=-static" -tags netgo,sqlite_omit_load_extension ./cmd/headscale RUN test -e /go/bin/headscale -FROM gcr.io/distroless/base +FROM gcr.io/distroless/base-debian11 COPY --from=build /go/bin/headscale /headscale ENV TZ UTC From 6076656373e0af6db3948008ea302368cf8eb5d0 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sun, 7 Nov 2021 18:57:37 +0000 Subject: [PATCH 03/13] Updated docs --- docs/Running.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/Running.md b/docs/Running.md index b784aba9..4b67cd25 100644 --- a/docs/Running.md +++ b/docs/Running.md @@ -58,7 +58,7 @@ -v $(pwd)/config:/etc/headscale/ \ -p 127.0.0.1:8080:8080 \ headscale/headscale:x.x.x \ - headscale namespaces create myfirstnamespace + /headscale namespaces create myfirstnamespace ``` or if your server is already running in docker: @@ -79,7 +79,8 @@ docker run \ -v $(pwd)/config:/etc/headscale/ \ -p 127.0.0.1:8080:8080 \ - headscale/headscale:x.x.x headscale serve + headscale/headscale:x.x.x \ + /headscale serve ``` ## Nodes configuration @@ -90,7 +91,9 @@ If you used tailscale.com before in your nodes, make sure you clear the tailscal rm -fr /var/lib/tailscale systemctl start tailscaled ``` + ### Adding node based on MACHINEKEY + 1. Add your first machine ```shell @@ -108,11 +111,12 @@ If you used tailscale.com before in your nodes, make sure you clear the tailscal docker run \ -v $(pwd)/config:/etc/headscale/ \ headscale/headscale:x.x.x \ - headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY + /headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY ``` or if your server is already running in docker: ```shell - docker exec headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY + docker exec \ + /headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY ``` ### Alternative: adding node with AUTHKEY @@ -129,13 +133,14 @@ If you used tailscale.com before in your nodes, make sure you clear the tailscal docker run \ -v $(pwd)/config:/etc/headscale/ \ headscale/headscale:x.x.x \ - headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h + /headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h ``` or if your server is already running in docker: ```shell - docker exec headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h + docker exec \ + /headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h ``` 2. Use the authkey on your node to register it From 67953bfe2f54c4231e95d77987eb8f39e3f3fc46 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sun, 7 Nov 2021 19:09:51 +0000 Subject: [PATCH 04/13] Fixed integration tests --- integration_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/integration_test.go b/integration_test.go index 1f30bcab..49ce44ca 100644 --- a/integration_test.go +++ b/integration_test.go @@ -254,7 +254,7 @@ func (s *IntegrationTestSuite) SetupSuite() { fmt.Sprintf("%s/integration_test/etc:/etc/headscale", currentPath), }, Networks: []*dockertest.Network{&network}, - Cmd: []string{"headscale", "serve"}, + Cmd: []string{"/headscale", "serve"}, } fmt.Println("Creating headscale container") @@ -301,7 +301,7 @@ func (s *IntegrationTestSuite) SetupSuite() { fmt.Printf("Creating headscale namespace: %s\n", namespace) result, err := executeCommand( &headscale, - []string{"headscale", "namespaces", "create", namespace}, + []string{"/headscale", "namespaces", "create", namespace}, []string{}, ) fmt.Println("headscale create namespace result: ", result) @@ -311,7 +311,7 @@ func (s *IntegrationTestSuite) SetupSuite() { authKey, err := executeCommand( &headscale, []string{ - "headscale", + "/headscale", "--namespace", namespace, "preauthkeys", @@ -369,7 +369,7 @@ func (s *IntegrationTestSuite) TestListNodes() { fmt.Println("Listing nodes") result, err := executeCommand( &headscale, - []string{"headscale", "--namespace", namespace, "nodes", "list"}, + []string{"/headscale", "--namespace", namespace, "nodes", "list"}, []string{}, ) assert.Nil(s.T(), err) @@ -502,7 +502,7 @@ func (s *IntegrationTestSuite) TestSharedNodes() { result, err := executeCommand( &headscale, - []string{"headscale", "nodes", "list", "-o", "json", "--namespace", "shared"}, + []string{"/headscale", "nodes", "list", "-o", "json", "--namespace", "shared"}, []string{}, ) assert.Nil(s.T(), err) @@ -515,7 +515,7 @@ func (s *IntegrationTestSuite) TestSharedNodes() { result, err := executeCommand( &headscale, - []string{"headscale", "nodes", "share", "--identifier", fmt.Sprint(machine.ID), "--namespace", "main"}, + []string{"/headscale", "nodes", "share", "--identifier", fmt.Sprint(machine.ID), "--namespace", "main"}, []string{}, ) assert.Nil(s.T(), err) @@ -525,7 +525,7 @@ func (s *IntegrationTestSuite) TestSharedNodes() { result, err = executeCommand( &headscale, - []string{"headscale", "nodes", "list", "--namespace", "main"}, + []string{"/headscale", "nodes", "list", "--namespace", "main"}, []string{}, ) assert.Nil(s.T(), err) From 83e72ec57d18227a8ddb0d3a06c8e657bc352549 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Tue, 9 Nov 2021 16:20:58 +0000 Subject: [PATCH 05/13] Allow running headscale without leading / --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8a201420..58c3a38b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ +# Builder image FROM golang:1.17.1-bullseye AS build ENV GOPATH /go WORKDIR /go/src/headscale @@ -10,10 +11,12 @@ COPY . . RUN go install -a -ldflags="-extldflags=-static" -tags netgo,sqlite_omit_load_extension ./cmd/headscale RUN test -e /go/bin/headscale +# Production image FROM gcr.io/distroless/base-debian11 COPY --from=build /go/bin/headscale /headscale ENV TZ UTC +ENV PATH / EXPOSE 8080/tcp -CMD ["/headscale"] +CMD ["headscale"] From 3b34c7b89afb240047385dcfef8ace0bc700230a Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Tue, 9 Nov 2021 16:23:36 +0000 Subject: [PATCH 06/13] Removed / from docker commands in docs Essentially reverts 6076656373e0af6db3948008ea302368cf8eb5d0 --- docs/Running.md | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/docs/Running.md b/docs/Running.md index 4b67cd25..014ef401 100644 --- a/docs/Running.md +++ b/docs/Running.md @@ -21,7 +21,8 @@ 3. Get yourself a DB - a) Get a Postgres DB running in docker + a) Get a Postgres DB running in Docker: + ```shell docker run --name headscale \ -e POSTGRES_DB=headscale @@ -30,7 +31,9 @@ -p 5432:5432 \ -d postgres ``` - or b) Prepare a SQLite DB file + + or b) Prepare a SQLite DB file: + ```shell touch config/db.sqlite ``` @@ -51,20 +54,21 @@ headscale namespaces create myfirstnamespace ``` - or docker: + or Docker: ```shell docker run \ -v $(pwd)/config:/etc/headscale/ \ -p 127.0.0.1:8080:8080 \ headscale/headscale:x.x.x \ - /headscale namespaces create myfirstnamespace + headscale namespaces create myfirstnamespace ``` - or if your server is already running in docker: + or if your server is already running in Docker: ```shell - docker exec headscale namespaces create myfirstnamespace + docker exec \ + headscale namespaces create myfirstnamespace ``` 6. Run the server @@ -73,15 +77,16 @@ headscale serve ``` - or docker: + or Docker: ```shell docker run \ -v $(pwd)/config:/etc/headscale/ \ -p 127.0.0.1:8080:8080 \ headscale/headscale:x.x.x \ - /headscale serve + headscale serve ``` + ## Nodes configuration If you used tailscale.com before in your nodes, make sure you clear the tailscaled data folder @@ -111,12 +116,13 @@ If you used tailscale.com before in your nodes, make sure you clear the tailscal docker run \ -v $(pwd)/config:/etc/headscale/ \ headscale/headscale:x.x.x \ - /headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY + headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY ``` - or if your server is already running in docker: + or if your server is already running in Docker: + ```shell docker exec \ - /headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY + headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY ``` ### Alternative: adding node with AUTHKEY @@ -133,17 +139,18 @@ If you used tailscale.com before in your nodes, make sure you clear the tailscal docker run \ -v $(pwd)/config:/etc/headscale/ \ headscale/headscale:x.x.x \ - /headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h + headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h ``` - or if your server is already running in docker: + or if your server is already running in Docker: ```shell docker exec \ - /headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h + headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h ``` -2. Use the authkey on your node to register it +2. Use the authkey on your node to register it: + ```shell tailscale up --login-server YOUR_HEADSCALE_URL --authkey YOURAUTHKEY ``` From c290ce4b91369c809ad6e244df9b500d87d8c18f Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Tue, 9 Nov 2021 16:24:10 +0000 Subject: [PATCH 07/13] Revert "Fixed integration tests" This reverts commit 67953bfe2f54c4231e95d77987eb8f39e3f3fc46. --- integration_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/integration_test.go b/integration_test.go index 49ce44ca..1f30bcab 100644 --- a/integration_test.go +++ b/integration_test.go @@ -254,7 +254,7 @@ func (s *IntegrationTestSuite) SetupSuite() { fmt.Sprintf("%s/integration_test/etc:/etc/headscale", currentPath), }, Networks: []*dockertest.Network{&network}, - Cmd: []string{"/headscale", "serve"}, + Cmd: []string{"headscale", "serve"}, } fmt.Println("Creating headscale container") @@ -301,7 +301,7 @@ func (s *IntegrationTestSuite) SetupSuite() { fmt.Printf("Creating headscale namespace: %s\n", namespace) result, err := executeCommand( &headscale, - []string{"/headscale", "namespaces", "create", namespace}, + []string{"headscale", "namespaces", "create", namespace}, []string{}, ) fmt.Println("headscale create namespace result: ", result) @@ -311,7 +311,7 @@ func (s *IntegrationTestSuite) SetupSuite() { authKey, err := executeCommand( &headscale, []string{ - "/headscale", + "headscale", "--namespace", namespace, "preauthkeys", @@ -369,7 +369,7 @@ func (s *IntegrationTestSuite) TestListNodes() { fmt.Println("Listing nodes") result, err := executeCommand( &headscale, - []string{"/headscale", "--namespace", namespace, "nodes", "list"}, + []string{"headscale", "--namespace", namespace, "nodes", "list"}, []string{}, ) assert.Nil(s.T(), err) @@ -502,7 +502,7 @@ func (s *IntegrationTestSuite) TestSharedNodes() { result, err := executeCommand( &headscale, - []string{"/headscale", "nodes", "list", "-o", "json", "--namespace", "shared"}, + []string{"headscale", "nodes", "list", "-o", "json", "--namespace", "shared"}, []string{}, ) assert.Nil(s.T(), err) @@ -515,7 +515,7 @@ func (s *IntegrationTestSuite) TestSharedNodes() { result, err := executeCommand( &headscale, - []string{"/headscale", "nodes", "share", "--identifier", fmt.Sprint(machine.ID), "--namespace", "main"}, + []string{"headscale", "nodes", "share", "--identifier", fmt.Sprint(machine.ID), "--namespace", "main"}, []string{}, ) assert.Nil(s.T(), err) @@ -525,7 +525,7 @@ func (s *IntegrationTestSuite) TestSharedNodes() { result, err = executeCommand( &headscale, - []string{"/headscale", "nodes", "list", "--namespace", "main"}, + []string{"headscale", "nodes", "list", "--namespace", "main"}, []string{}, ) assert.Nil(s.T(), err) From f44138c944c35edf3a6ab8f2b4249992ef9ef96c Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Fri, 12 Nov 2021 02:20:46 +0000 Subject: [PATCH 08/13] Added debug container --- Dockerfile.debug | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Dockerfile.debug diff --git a/Dockerfile.debug b/Dockerfile.debug new file mode 100644 index 00000000..2d99faec --- /dev/null +++ b/Dockerfile.debug @@ -0,0 +1,24 @@ +# Builder image +FROM golang:1.17.1-bullseye AS build +ENV GOPATH /go +WORKDIR /go/src/headscale + +COPY go.mod go.sum /go/src/headscale/ +RUN go mod download + +COPY . . + +RUN go install -a -ldflags="-extldflags=-static" -tags netgo,sqlite_omit_load_extension ./cmd/headscale +RUN test -e /go/bin/headscale + +# Debug image +FROM gcr.io/distroless/base-debian11:debug + +COPY --from=build /go/bin/headscale /headscale +ENV TZ UTC +ENV PATH="/:$PATH" + +# Need to reset the entrypoint or everything will run as a busybox script +ENTRYPOINT [] +EXPOSE 8080/tcp +CMD ["headscale"] From c0f16603c5d8656192b9854bf6c80aede3329059 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sat, 13 Nov 2021 22:10:58 +0000 Subject: [PATCH 09/13] Copy headscale binary in /bin in the container This way, we don't need to alter the PATH --- Dockerfile | 3 +-- Dockerfile.debug | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 58c3a38b..0d344268 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,9 +14,8 @@ RUN test -e /go/bin/headscale # Production image FROM gcr.io/distroless/base-debian11 -COPY --from=build /go/bin/headscale /headscale +COPY --from=build /go/bin/headscale /bin/headscale ENV TZ UTC -ENV PATH / EXPOSE 8080/tcp CMD ["headscale"] diff --git a/Dockerfile.debug b/Dockerfile.debug index 2d99faec..320b5c93 100644 --- a/Dockerfile.debug +++ b/Dockerfile.debug @@ -14,9 +14,8 @@ RUN test -e /go/bin/headscale # Debug image FROM gcr.io/distroless/base-debian11:debug -COPY --from=build /go/bin/headscale /headscale +COPY --from=build /go/bin/headscale /bin/headscale ENV TZ UTC -ENV PATH="/:$PATH" # Need to reset the entrypoint or everything will run as a busybox script ENTRYPOINT [] From 7d77acd88ea847e8412768fb8b218c7ced2a2b02 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Sat, 13 Nov 2021 22:16:37 +0000 Subject: [PATCH 10/13] Docs for debug container --- docs/Running.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/Running.md b/docs/Running.md index 014ef401..32fee2c8 100644 --- a/docs/Running.md +++ b/docs/Running.md @@ -158,3 +158,31 @@ If you used tailscale.com before in your nodes, make sure you clear the tailscal If you create an authkey with the `--ephemeral` flag, that key will create ephemeral nodes. This implies that `--reusable` is true. Please bear in mind that all headscale commands support adding `-o json` or `-o json-line` to get nicely JSON-formatted output. + +## Debugging headscale running in Docker + +The `headscale/headscale` Docker container is based on a "distroless" image that does not contain a shell or any other debug tools. If you need to debug your application running in the Docker container, you can use the `-debug` variant, for example `headscale/headscale:x.x.x-debug`. + +### Running the debug Docker container + +To run the debug Docker container, use the exact same commands as above, but replace `headscale/headscale:x.x.x` with `headscale/headscale:x.x.x-debug` (`x.x.x` is the version of headscale). The two containers are compatible with each other, so you can alternate between them. + +### Executing commands in the debug container + +The default command in the debug container is to run `headscale`, which is located at `/bin/headscale` inside the container. + +Additionally, the debug container includes a minimalist Busybox shell. + +To launch a shell in the container, use: + +``` +docker run -it headscale/headscale:x.x.x-debug sh +``` + +You can also execute commands directly, such as `ls /bin` in this example: + +``` +docker run headscale/headscale:x.x.x-debug ls /bin +``` + +Using `docker exec` allows you to run commands in an existing container. From 8454c1b52c4b90b3dd82e257db1b95cc36d04d92 Mon Sep 17 00:00:00 2001 From: ohdearaugustin Date: Sun, 14 Nov 2021 21:15:33 +0100 Subject: [PATCH 11/13] workflows/release: add docker debug --- .github/workflows/release.yml | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c0605f10..05d01c92 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,3 +72,43 @@ jobs: context: . tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + docker-debug-release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: | + ${{ secrets.DOCKERHUB_USERNAME }}/headscale + ghcr.io/${{ github.repository_owner }}/headscale + tags: | + type=semver,pattern={{version}}-debug + type=semver,pattern={{major}}.{{minor}}-debug + type=semver,pattern={{major}}-debug + type=sha-debug + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GHCR + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + push: true + context: . + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} From c6bc9fffe96545a732ef6ac3f1870b5c2efb0958 Mon Sep 17 00:00:00 2001 From: ohdearaugustin Date: Sun, 14 Nov 2021 22:24:27 +0100 Subject: [PATCH 12/13] workflows/release: fix docker debug tags --- .github/workflows/release.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 05d01c92..ace8014b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -81,18 +81,21 @@ jobs: with: fetch-depth: 0 - name: Docker meta - id: meta + id: meta-debug uses: docker/metadata-action@v3 with: # list of Docker images to use as base name for tags images: | ${{ secrets.DOCKERHUB_USERNAME }}/headscale ghcr.io/${{ github.repository_owner }}/headscale + flavor: | + latest=false tags: | type=semver,pattern={{version}}-debug type=semver,pattern={{major}}.{{minor}}-debug type=semver,pattern={{major}}-debug - type=sha-debug + type=raw,value=latest-debug + type=sha,suffix=-debug - name: Login to DockerHub uses: docker/login-action@v1 with: @@ -110,5 +113,6 @@ jobs: with: push: true context: . - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + file: Dockerfile.debug + tags: ${{ steps.meta-debug.outputs.tags }} + labels: ${{ steps.meta-debug.outputs.labels }} From 7bc2f41b3363806f8d2fd8b547816587b0413457 Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Mon, 15 Nov 2021 15:37:40 -0800 Subject: [PATCH 13/13] =?UTF-8?q?Run=20prettier=20=F0=9F=92=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Running.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Running.md b/docs/Running.md index 05985e94..867c5ed2 100644 --- a/docs/Running.md +++ b/docs/Running.md @@ -34,7 +34,7 @@ ``` or b) Prepare a SQLite DB file: - + ```shell touch config/db.sqlite ``` @@ -115,7 +115,7 @@ systemctl start tailscaled ``` or Docker: - + ```shell docker run \ -v $(pwd)/config:/etc/headscale/ \