docker-compose创建我的app文件夹卷,并在其中运行node命令



Docker新手。

我正在尝试为本地开发设置docker。我的最终目标是能够使用"vite"。做热模块重载开发服务器

这是我正在尝试的:

#docker-compose.yml
version: '3.8'
services:
mpvdb:
image: mysql:5.7
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=cicd
ports:
- 3307:3306
volumes:
- db:/var/lib/mysql
- ./mysql-dump:/docker-entrypoint-initdb.d
mvpnode:
image: node:18.1.0
ports:
- 4444:4444
volumes:
- type: volume
source: client
target: /client
command: sh -c "cd ./client && npm run start"
volumes:
db:
client:

请注意,我在我的repo中有一个名为client的文件夹,我想让这个文件夹可以访问节点容器,这样如果我对它进行更改,vite开发服务器(通过npm run start启动)将检测到更改并做它的事情,最终将应用程序服务于端口4444。

我面临的问题是在我试图建立客户端卷或在我的命令脚本。当我尝试运行该命令并启动服务器时,我得到以下内容:

mvpnode_1  | npm ERR! code ENOENT
mvpnode_1  | npm ERR! syscall open
mvpnode_1  | npm ERR! path /client/package.json
mvpnode_1  | npm ERR! errno -2
mvpnode_1  | npm ERR! enoent ENOENT: no such file or directory, open '/client/package.json'
mvpnode_1  | npm ERR! enoent This is related to npm not being able to find a file.
mvpnode_1  | npm ERR! enoent

首先,我如何改变我的yml文件使其工作?

其次,我假设容器将保持与我的windows文件系统上的/server文件夹的连接是否正确?所以,如果我改变了应用程序中的代码,它将反映在容器的体积?或者这是错误的,它缓存代码的副本,当我旋转容器?我在网上找到了与此相矛盾的信息。

谢谢!

我认为你的问题是你正在使用docker卷。docker卷是由docker管理的一块存储空间。在使用热加载进行开发时,您通常需要的是绑定挂载,它允许容器访问主机文件系统的一部分。通过热加载,您可以绑定挂载到保存源代码的位置。

如果源代码位于docker-compose文件目录下的client目录中,则可以执行

version: '3.8'
services:
mpvdb:
image: mysql:5.7
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=cicd
ports:
- 3307:3306
volumes:
- db:/var/lib/mysql
- ./mysql-dump:/docker-entrypoint-initdb.d
mvpnode:
image: node:18.1.0
ports:
- 4444:4444
volumes:
- ./client:/client
command: sh -c "cd /client && npm install && npm run start"
volumes:
db:

你还应该在启动时运行的命令中添加npm install,因为你需要在启动应用程序之前安装相关的节点模块。

相关内容

最新更新