docker-compose create volume of my app folder and 运行 node command in it
docker-compose create volume of my app folder and run node command in it
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:
请注意,我的存储库中有一个名为 client
的文件夹,我想让节点容器可以访问该文件夹,这样如果我对其进行更改,vite
开发服务器(已启动via 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 管理的一块存储。在使用热重载进行开发时,您通常需要的是 bind mount,它允许容器访问主机文件系统的一部分。通过热重载,您可以将绑定挂载到保存源代码的位置。
如果您的源代码位于 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
添加到命令 运行 中,因为您需要在启动应用程序之前安装相关的节点模块。
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:
请注意,我的存储库中有一个名为 client
的文件夹,我想让节点容器可以访问该文件夹,这样如果我对其进行更改,vite
开发服务器(已启动via 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 管理的一块存储。在使用热重载进行开发时,您通常需要的是 bind mount,它允许容器访问主机文件系统的一部分。通过热重载,您可以将绑定挂载到保存源代码的位置。
如果您的源代码位于 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
添加到命令 运行 中,因为您需要在启动应用程序之前安装相关的节点模块。