运行 docker 容器内的 vite 开发服务器
running a vite dev server inside a docker container
我有一个 Vue-cli 应用程序,我正在尝试将其转换为 vite。我正在使用 Docker 到 运行 服务器。我查看了一些教程并在开发模式下获得了 运行 的邀请,没有出现错误。但是,浏览器无法访问该端口。也就是说,当我在我的 macbook 命令行上时(Docker 之外)我不能 curl
它:
$ curl localhost:8080
curl: (52) Empty reply from server
如果我尝试 localhost:8081,我会得到 Failed to connect
。此外,如果我 运行 webpack 开发服务器正常工作,所以我知道我的容器的端口是公开的。
此外,如果我 运行 curl 在与 运行 连接 vite 服务器的同一台虚拟机中,那么我知道 vite 正在运行。
详情如下:
在package.json中:
...
"dev": "vue-cli-service serve",
"vite": "vite",
...
整个vite.config.ts文件:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
resolve: { alias: { '@': '/src' } },
plugins: [vue()],
server: {
port: 8080
}
})
启动容器的命令:
docker-compose run --publish 8080:8080 --rm app bash
docker-compose.yml 文件:
version: '3.7'
services:
app:
image: myapp
build: .
container_name: myapp
ports:
- "8080:8080"
Docker文件:
FROM node:16.10.0
RUN npm install -g npm@8.1.3
RUN npm install -g @vue/cli@4.5.15
RUN mkdir /srv/app && chown node:node /srv/app
USER node
WORKDIR /srv/app
我运行在vite的docker容器中的命令:
npm run vite
我在 vue-cli 的 docker 容器中 运行 的命令:
npm run dev
所以,总结一下:我的设置在 运行 连接 vue-cli 开发服务器时有效,但在使用 vite 开发服务器时不起作用。
我明白了。我需要在配置中添加一个“主机”属性,所以现在我的 vite.config.ts 文件是:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
resolve: { alias: { '@': '/src' } },
plugins: [vue()],
server: {
host: true,
port: 8080
}
})
您也可以通过以下方式启动您的 vite 服务器:
$ npm run dev -- --host
这会将 --host 标志传递给 vite 命令行。
您将看到如下输出:
vite v2.7.9 dev server running at:
> Local: http://localhost:3000/
> Network: http://192.168.4.68:3000/
ready in 237ms.
(我是 运行 VirtualBox VM - 但我认为这也适用于此。)
您需要添加主机 0.0.0.0
以允许任何外部访问:
export default defineConfig({
server: {
host: '0.0.0.0',
watch: {
usePolling: true
}
},})
我有一个 Vue-cli 应用程序,我正在尝试将其转换为 vite。我正在使用 Docker 到 运行 服务器。我查看了一些教程并在开发模式下获得了 运行 的邀请,没有出现错误。但是,浏览器无法访问该端口。也就是说,当我在我的 macbook 命令行上时(Docker 之外)我不能 curl
它:
$ curl localhost:8080
curl: (52) Empty reply from server
如果我尝试 localhost:8081,我会得到 Failed to connect
。此外,如果我 运行 webpack 开发服务器正常工作,所以我知道我的容器的端口是公开的。
此外,如果我 运行 curl 在与 运行 连接 vite 服务器的同一台虚拟机中,那么我知道 vite 正在运行。
详情如下:
在package.json中:
...
"dev": "vue-cli-service serve",
"vite": "vite",
...
整个vite.config.ts文件:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
resolve: { alias: { '@': '/src' } },
plugins: [vue()],
server: {
port: 8080
}
})
启动容器的命令:
docker-compose run --publish 8080:8080 --rm app bash
docker-compose.yml 文件:
version: '3.7'
services:
app:
image: myapp
build: .
container_name: myapp
ports:
- "8080:8080"
Docker文件:
FROM node:16.10.0
RUN npm install -g npm@8.1.3
RUN npm install -g @vue/cli@4.5.15
RUN mkdir /srv/app && chown node:node /srv/app
USER node
WORKDIR /srv/app
我运行在vite的docker容器中的命令:
npm run vite
我在 vue-cli 的 docker 容器中 运行 的命令:
npm run dev
所以,总结一下:我的设置在 运行 连接 vue-cli 开发服务器时有效,但在使用 vite 开发服务器时不起作用。
我明白了。我需要在配置中添加一个“主机”属性,所以现在我的 vite.config.ts 文件是:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
resolve: { alias: { '@': '/src' } },
plugins: [vue()],
server: {
host: true,
port: 8080
}
})
您也可以通过以下方式启动您的 vite 服务器:
$ npm run dev -- --host
这会将 --host 标志传递给 vite 命令行。
您将看到如下输出:
vite v2.7.9 dev server running at:
> Local: http://localhost:3000/
> Network: http://192.168.4.68:3000/
ready in 237ms.
(我是 运行 VirtualBox VM - 但我认为这也适用于此。)
您需要添加主机 0.0.0.0
以允许任何外部访问:
export default defineConfig({
server: {
host: '0.0.0.0',
watch: {
usePolling: true
}
},})