目次
- 前提
- 事象
- 使用ファイル
- 疎通確認
- 対処
- なぜ
- 参考URL
- おわりに
1. 前提 ↑
- node コンテナ内で
npm init vue@latest
を実行 → hello-vue3
という名前で Vue3 プロジェクトを作成し、npm install
& npm run dev
2. 事象 ↑
- ブラウザで確認すると、「localhost からデータが送信されませんでした。ERR_EMPTY_RESPONSE」画面になる
3. 使用ファイル ↑
Dockerfile
FROM node:18.12.1-bullseye
WORKDIR /app
RUN apt-get update
docker-compose.yml
version: '3.8'
services:
vue:
build: .
command: /bin/sh -c "npm install; npm run dev"
ports:
- 5173:5173
volumes:
- ./hello-vue3:/app
stdin_open: true
tty: true
4. 疎通確認 ↑
コンテナの中から
$ docker-compose exec vue bash
/app# curl http://localhost:5173/
<!DOCTYPE html>
<html lang="en">
--- 省略 ---
自分のローカルマシンから
$ curl http://localhost:5173/
curl: (52) Empty reply from server
5. 対処 ↑
vite.config.ts
に server.host: true
を追加
vite.config.ts
export default defineConfig({
plugins: [vue()],
server: {
host: true,
},
--- 省略 ---
6. なぜ ↑
localhost
は同一ホスト内でしか通信できない
- コンテナと、自分のローカルマシンは別のホスト
- つまりコンテナ内の
localhost
でサーバーを立てても、ローカルマシンからはアクセスできない
vite.config
の server.host
に true
を設定することで、0.0.0.0
でリクエストを受けるようになる
0.0.0.0
でサーバーを立てると、ホストの全てでリクエストを受けられる = コンテナの外からもアクセスできる
7. 参考 URL ↑
8. おわりに ↑
- いろいろなところで見かけた
--host 0.0.0.0
とか ENV HOST 0.0.0.0
が何をしたいのか、やっと理解できた