【问题标题】:Javascript Error: listen EADDRINUSE: address already in use :::3000 How to avoid and fix itJavascript 错误:监听 EADDRINUSE:地址已在使用 :::3000 如何避免和修复它
【发布时间】:2020-09-12 10:45:56
【问题描述】:

我有docker-compose.ymllike 关注

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

然后我想将Post 方法测试为api-server,但返回了一些错误。

{
    "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 端口?

如何避免这个错误?

如果有人有意见,请告诉我

谢谢

【问题讨论】:

  • 当 compose 启动时,不要从 docker 内部启动服务器,而是让 compose 关闭,然后打开 compose 并尝试,因为您的主要问题是 500 服务器错误,因此请检查 docker 日志以获取 api 服务器

标签: javascript node.js docker docker-compose


【解决方案1】:

您的 Node 应用程序实例已经在运行(作为主容器进程),因此当您在调试 shell 中 npm run start 第二个实例时,您将收到“地址已在使用”错误。如果您尝试在两个单独的终端窗口中启动服务器两次,则在没有 Docker 的情况下会出现相同的错误。

如果您尝试主动调试程序,我建议使用主机节点安装,这通常会更方便。或者,如果您确实需要服务器的两个副本,请在两个单独的容器中运行它们;您可以使用docker compose run api-server ... 来获取一个新容器,该容器的设置与现有容器大致相同(特别是,没有发布的端口),但命令不同。

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2021-02-26
    • 1970-01-01
    • 2020-11-09
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多