簡體   English   中英

Javascript 錯誤:聽 EADDRINUSE:地址已在使用中 :::3000 如何避免和修復它

[英]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

然后嘗試POSTapi-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM