Javascript错误:监听EADDRINUSE:地址已在使用::: 3000如何避免和修复它

时间:2020-09-12 10:45:56

标签: javascript node.js docker docker-compose

我有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

然后我想测试Post的{​​{1}}方法,但是返回了一些错误。

api-server

因此,我试图知道在{ "statusCode": 500, "message": "Internal server error" } 中输入api-server的原因

docker

然后我内部启动docker exec -it api-server sh

api-server

然后尝试从npm run startPOST

但是控制台中显示以下错误。

api-server

这是什么原因?

`docker-compose up -d'时已经使用了端口3000?

如何避免此错误?

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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