Skip to content

Commit 6a92e68

Browse files
authored
Merge pull request #45 from DZ-IO/master
更好的docker支持
2 parents 88d1fb7 + cedce10 commit 6a92e68

File tree

2 files changed

+25
-21
lines changed

2 files changed

+25
-21
lines changed

Dockerfile

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
FROM golang:1.23 AS build
2+
ARG GOPROXY=https://proxy.golang.org,direct
23
WORKDIR /workspace
34
COPY go.mod go.sum ./
45
RUN go mod download
56
COPY . .
67
RUN CGO_ENABLED=0 go test ./...
78
RUN CGO_ENABLED=0 go build -o app
89

9-
FROM gcr.io/distroless/static-debian12 AS prod
10-
WORKDIR /workspace
11-
COPY --from=build /workspace/app app
12-
ENTRYPOINT [ "./app"]
10+
FROM scratch
11+
COPY --from=build /workspace/app /app
12+
ENV dav="/,/data,null,null,false"
13+
EXPOSE 80
14+
VOLUME [ "/data" ]
15+
ENTRYPOINT [ "/app"]

doc/nonroot_zh_CN.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,32 @@
44

55
## 步骤
66

7-
以 Docker Compose 为例,假设你希望共享 `./data/dir1``./data/dir2` 两个目录。首先,准备一个 `docker-compose.yml` 文件:
7+
以 Docker Compose 为例,假设你希望共享 `./data/dir1``./data/dir2` 两个目录。首先,准备好您的目录
8+
9+
```bash
10+
mkdir -p ./data # 这里只是一个示例,您可以用任何方式创建目录
11+
```
12+
13+
接下来,获取目录的 UID 和 GID
14+
15+
```bash
16+
ls -nd ./data | awk '{ print $3":"$4 }'
17+
```
18+
19+
然后,创建一个 `docker-compose.yml` 文件:
820

921
```yaml
1022
services:
1123
go_webdav:
1224
image: 117503445/go_webdav
1325
restart: unless-stopped
1426
volumes:
15-
- ./data:/home/nonroot
27+
- ./data:/data
1628
environment:
17-
- "dav=/dir1,/home/nonroot/dir1,null,null,false;/dir2,/home/nonroot/dir2,null,null,false"
29+
- "dav=/dir1,/data/dir1,null,null,false;/dir2,/data/dir2,null,null,false"
1830
ports:
1931
- "80:80"
20-
user: "nonroot" # 指定容器内的用户为 nonroot
21-
```
22-
23-
接下来,创建目录并赋予 777 权限:
24-
25-
```bash
26-
mkdir -p ./data/dir1 ./data/dir2
27-
chmod 777 ./data/dir1 ./data/dir2
32+
user: "1000:1000" # 填写正确的UID和GID以确保以正确的用户执行
2833
```
2934
3035
最后,启动容器:
@@ -35,10 +40,6 @@ docker compose up -d
3540

3641
## 注意事项
3742

38-
`117503445/go_webdav` 是基于 [gcr.io/distroless/static-debian12](https://github.com/GoogleContainerTools/distroless) 制作的。镜像中的 `nonroot` 用户是非 root 用户,UID 为 65532,并对 `/home/nonroot` 目录有写入权限。
39-
40-
- 如果你没有提前创建 `data` 目录,容器启动后会自动创建该目录。但由于这是由具有 root 权限的 Docker Daemon 创建的,可能会导致权限问题。
41-
- 如果你没有提前创建 `dir1``dir2` 目录,容器启动后会由 `GoWebdav` 创建这些目录。但由于它们属于 `nonroot` 用户,所以外部的普通用户无法写入。
42-
- 如果你没有提前赋予 `777` 权限,`GoWebdav``nonroot` 用户将无法写入这些目录。
43-
43+
docker 支持通过`--user "UID:GID"`的方式指定用户,所以我们可以用这个功能让容器运行在非 root 用户下
44+
不过您仍需提前创建 `data` 目录,以防止 Docker Daemon 使用 root 权限创建,导致权限问题。
4445
在上述情景中,容器内外都是普通用户。如果你只要求容器内是普通用户、外部是 root 用户,或者容器内是 root 用户、外部是普通用户,可能会更简单一些。

0 commit comments

Comments
 (0)