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開發服務器(通過 啟動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 檔案以使其正常作業?
其次,我假設容器將保持與/server我的 Windows 檔案系統上的檔案夾的連接是否正確?那么如果我更改應用程式中的代碼,它會反映在容器的體積中嗎?或者這是錯誤的,當我啟動容器時它會快取代碼的副本?我在網上找到了關于此的相互矛盾的資訊。
謝謝!
uj5u.com熱心網友回復:
我認為您的問題是您使用的是 docker 卷。docker 卷是由 docker 管理的一塊存盤空間。當您使用熱多載進行開發時,您通常想要的是系結掛載,它允許容器訪問主機檔案系統的一部分。通過熱多載,您可以系結掛載到您保存源代碼的位置。
如果您的源代碼位于client包含 docker-compose 檔案的目錄下的目錄中,則可以執行
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啟動時運行的命令,因為您需要在啟動應用程式之前安裝相關的節點模塊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/473641.html
標籤:节点.js 码头工人 码头工人撰写 dockerfile 码头工人命令
上一篇:如何將Dockerfile`gitconfig`值應用于非root用戶的ssh會話?
下一篇:無法登錄Postgres
