是否可以使用 docker-compose 在同一个容器中安装和卷?
Is it possible to have a mount and volume in the same container using docker-compose?
是否可以在同一个容器中同时安装一个卷和一个卷?我一直在尝试使用不同的路径设置挂载和卷,但我无法获得正确的权限集。
我的 docker 文件:
FROM node:16-alpine
RUN apk add dumb-init
RUN addgroup appgroup && adduser -S appuser -G appgroup
RUN mkdir -p /app/logs
WORKDIR /app/
COPY package*.json ./
RUN npm install
COPY . /app
RUN chown -R appuser:appgroup /app/
USER appuser
docker-compose.yml
version: "3.8"
services:
my-service:
user: "1000"
container_name: demou
build:
context: .
image: "my-service"
working_dir: /app/
ports:
- 80:80
environment:
- NODE_VERSION=16
volumes:
- ~/logs:/app/logs/:rw
- other:/app/other/:rw
command: sh -c "dumb-init node src/server.js"
networks:
- Snet
volumes:
other:
name: "other"
networks:
Snet:
name: "Snetwork"
如果我将 user: "1000"
保留在 docker-compose 文件中,挂载工作正常,我可以看到文件,但卷失败,并且在尝试写入 [=35 时我的权限被拒绝=] 如卷声明中所指定。
删除 user: "1000"
解析了卷权限,但导致挂载失败,权限被拒绝。
使用 docker exec,我可以看到 user: "1000"
的以下权限
drwxr-xr-x 1 appuser appgroup 4096 Nov 15 15:08 .
drwxr-xr-x 1 root root 4096 Nov 15 15:08 ..
drwxrwxr-x 2 node node 4096 Nov 15 15:08 logs
drwxr-xr-x 1 appuser appgroup 4096 Nov 15 15:08 node_modules
drwxr-xr-x 2 root root 4096 Nov 15 15:08 other
-rw-rw-r-- 1 appuser appgroup 31394 Nov 15 11:55 package-lock.json
-rw-rw-r-- 1 appuser appgroup 274 Nov 15 11:55 package.json
drwxrwxr-x 1 appuser appgroup 4096 Nov 13 13:56 src
此外,为什么日志目录归 node:node 所有?我还没有设置任何节点用户或组。
我的 OS/docker 主机详细信息:
经销商编号:Ubuntu
说明:Ubuntu 20.04.3 LTS
发布:20.04
代号:focal
谢谢
~/logs:/app/logs/:rw
必须将目录 ~/logs
授予 1000:1000 (appuser:appgroup) 读写权限,因为这是主机上的现有目录。
other:/app/other/:rw
命名卷由 docker 在 root
拥有的主机上创建(无根模式除外)。使用VOLUME
保留Dockerfile中设置的权限:
FROM node:16-alpine
RUN apk add dumb-init
RUN addgroup appgroup && adduser -S appuser -G appgroup
RUN mkdir -p /app/logs && mkdir /app/other
WORKDIR /app/
COPY package*.json ./
RUN npm install
COPY . /app
RUN chown -R appuser:appgroup /app/
USER appuser
VOLUME /app/other
why is logs directory owned by node:node?
此 user:group 是在基础映像 node:16-alpine 中创建的。
解决类似问题的替代 ,如果它适合您的需要。
是否可以在同一个容器中同时安装一个卷和一个卷?我一直在尝试使用不同的路径设置挂载和卷,但我无法获得正确的权限集。
我的 docker 文件:
FROM node:16-alpine
RUN apk add dumb-init
RUN addgroup appgroup && adduser -S appuser -G appgroup
RUN mkdir -p /app/logs
WORKDIR /app/
COPY package*.json ./
RUN npm install
COPY . /app
RUN chown -R appuser:appgroup /app/
USER appuser
docker-compose.yml
version: "3.8"
services:
my-service:
user: "1000"
container_name: demou
build:
context: .
image: "my-service"
working_dir: /app/
ports:
- 80:80
environment:
- NODE_VERSION=16
volumes:
- ~/logs:/app/logs/:rw
- other:/app/other/:rw
command: sh -c "dumb-init node src/server.js"
networks:
- Snet
volumes:
other:
name: "other"
networks:
Snet:
name: "Snetwork"
如果我将 user: "1000"
保留在 docker-compose 文件中,挂载工作正常,我可以看到文件,但卷失败,并且在尝试写入 [=35 时我的权限被拒绝=] 如卷声明中所指定。
删除 user: "1000"
解析了卷权限,但导致挂载失败,权限被拒绝。
使用 docker exec,我可以看到 user: "1000"
drwxr-xr-x 1 appuser appgroup 4096 Nov 15 15:08 .
drwxr-xr-x 1 root root 4096 Nov 15 15:08 ..
drwxrwxr-x 2 node node 4096 Nov 15 15:08 logs
drwxr-xr-x 1 appuser appgroup 4096 Nov 15 15:08 node_modules
drwxr-xr-x 2 root root 4096 Nov 15 15:08 other
-rw-rw-r-- 1 appuser appgroup 31394 Nov 15 11:55 package-lock.json
-rw-rw-r-- 1 appuser appgroup 274 Nov 15 11:55 package.json
drwxrwxr-x 1 appuser appgroup 4096 Nov 13 13:56 src
此外,为什么日志目录归 node:node 所有?我还没有设置任何节点用户或组。
我的 OS/docker 主机详细信息:
经销商编号:Ubuntu 说明:Ubuntu 20.04.3 LTS 发布:20.04 代号:focal
谢谢
~/logs:/app/logs/:rw
必须将目录 ~/logs
授予 1000:1000 (appuser:appgroup) 读写权限,因为这是主机上的现有目录。
other:/app/other/:rw
命名卷由 docker 在 root
拥有的主机上创建(无根模式除外)。使用VOLUME
保留Dockerfile中设置的权限:
FROM node:16-alpine
RUN apk add dumb-init
RUN addgroup appgroup && adduser -S appuser -G appgroup
RUN mkdir -p /app/logs && mkdir /app/other
WORKDIR /app/
COPY package*.json ./
RUN npm install
COPY . /app
RUN chown -R appuser:appgroup /app/
USER appuser
VOLUME /app/other
why is logs directory owned by node:node?
此 user:group 是在基础映像 node:16-alpine 中创建的。
解决类似问题的替代