[英]Javascript Error: listen EADDRINUSE: address already in use :::3000 How to avoid and fix it
我有docker-compose.yml
如下
version: '3'
services:
api-server:
build: ./api
links:
- 'db'
ports:
- '3000:3000'
volumes:
- ./api:/src
- ./src/node_modules
tty: true
container_name: api-server
db:
build:
context: .
dockerfile: ./db/Dockerfile
restart: always
hostname: db
environment:
MYSQL_ROOT_PASSWORD: test
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: test
volumes:
- './db:/config'
ports:
- 3306:3306
container_name: db
然后我試過了
docker-compose build
docker-compose up -d
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
567e1e7463d api-server "docker-entrypoint.s…" 21 hours ago Up 23 minutes 0.0.0.0:3000->3000/tcp api-server
e85e746d699 db "docker-entrypoint.s…" 3 days ago Up 21 hours 0.0.0.0:3306->3306/tcp, 33060/tcp db
然后我想測試api-server
Post
方法,但返回了一些錯誤。
{
"statusCode": 500,
"message": "Internal server error"
}
因此,我試圖知道在docker
進入api-server
的原因
docker exec -it api-server sh
我在內部啟動api-server
npm run start
然后嘗試POST
到api-server
但是控制台中顯示以下錯誤。
Error: listen EADDRINUSE: address already in use :::3000
這是什么原因?
`docker-compose up -d' 時已經使用了端口 3000 嗎?
如何避免這個錯誤?
如果有人有意見,請告訴我
謝謝
已經有一個 Node 應用程序實例正在運行(作為主容器進程),因此當您npm run start
在調試 shell 中npm run start
第二個應用程序時,您將收到“地址已在使用中”錯誤。 如果您嘗試在兩個單獨的終端窗口中兩次啟動服務器,則在沒有 Docker 的情況下您會得到相同的錯誤。
如果您正在嘗試主動調試程序,我建議您使用主機節點安裝,這通常會更方便。 或者,如果您確實需要服務器的兩個副本,請在兩個單獨的容器中運行它們; 您可以使用docker compose run api-server ...
來獲得一個新容器,其設置與現有容器大致相同(特別是,沒有發布端口)但命令不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.