Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我如何保证docker主机卷在多次“docker compose up”后具有正确的权限&`码头工人放下`_Node.js_Docker_Docker Compose_Volume_Docker Volume - Fatal编程技术网

Node.js 我如何保证docker主机卷在多次“docker compose up”后具有正确的权限&`码头工人放下`

Node.js 我如何保证docker主机卷在多次“docker compose up”后具有正确的权限&`码头工人放下`,node.js,docker,docker-compose,volume,docker-volume,Node.js,Docker,Docker Compose,Volume,Docker Volume,我正在开发一个Node.js应用程序,它使用Postgres作为数据库。我为Node.js和Postgres编写了一个“docker compose.yml”文件 我创建pgdata目录,然后编写Dockerfile来构建Node.js映像: FROM node:14.15.0 WORKDIR "/usr/src/app" CMD [ "npm", "start" ] 下面是我编写“docker compose.yml”文件的方式

我正在开发一个Node.js应用程序,它使用Postgres作为数据库。我为Node.js和Postgres编写了一个“docker compose.yml”文件

我创建pgdata目录,然后编写Dockerfile来构建Node.js映像:

FROM node:14.15.0

WORKDIR "/usr/src/app"

CMD [ "npm", "start" ]
下面是我编写“docker compose.yml”文件的方式:

版本:“3.7”
服务:
db:
图片:博士后:13
环境文件:
-./.环境博士后
卷数:
-类型:绑定
资料来源:./pgdata
目标:/var/lib/postgresql/data
卷:
诺考比:真的
环境:
PGDATA:/var/lib/postgresql/data/PGDATA
容器名称:${APP\u name}-db
快速应用程序:
图像:${APP_NAME}-express应用程序:1
建造:
上下文:。
dockerfile:./dockerfile
卷数:
-类型:绑定
来源:。
目标:/usr/src/app
卷:
诺考比:真的
环境文件:
-./环境
-./.环境博士后
取决于:
-分贝
端口:
-“${APP_PORT}:${DOCKER_CONTAINER_APP_PORT}”
环境:
POSTGRES_主机:db
然后我通过运行以下命令启动我的应用程序:
docker compose-up--build
,一切正常。docker构建图像并创建其容器。我的应用程序工作正常,但当我删除其映像(node.js image,出于某些原因)并运行
docker compose up--build
命令时,它会为我抛出以下错误:

Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Building express-app
error checking context: 'can't stat '/home/project1/pgdata/pgdata''.
ERROR: Service 'express-app' failed to build
之后,我意识到docker在挂载目录(pgdata)中创建了一个目录

因此,我使用“ls-ltrha”检查it权限,这是输出:

total 12K
drwxr-xr-x  3 mjb              mjb  4.0K FEB   20 12:34 .
drwx------ 19 systemd-coredump root 4.0K FEB   20 12:34 pgdata
drwxr-xr-x  6 mjb              mjb  4.0K FEB   21 12:19 ..

构建Docker映像时,您提供的上下文目录(通常是当前目录)将发送到Docker守护进程进行构建。这样做的目的是能够
文件从上下文目录复制到Docker映像中,这样您就可以拥有一个自包含映像,无需单独装入应用程序代码即可运行

在您的设置中,数据库内容存储在
/pgdata
中,因此您将使用目录的子目录作为生成上下文。该目录中的数据将由数据库容器中的用户拥有,而该用户通常与主机用户不同(这没关系)。但是现在由于另一个用户拥有
/pgdata
目录,映像构建序列无法将构建上下文目录发送到Docker守护进程,因此会出现错误

您可以创建一个通知Docker从映像生成中排除数据库数据(无论发生什么情况,您都不会希望在映像中包含这些数据)。将其与
Dockerfile
docker compose.yml
文件放在同一目录中。它可以只包含

#dockrignore
#不要将主机的节点_模块复制到映像中;我们将运行npm安装
节点单元
#根本不要将数据库存储复制到映像中
pgdata

谢谢。这有什么安全原因吗?我认为这是为了防止我/黑客访问其他用户,你怎么看?我说得对吗?