Docker-Compose:通常每个套接字地址(协议/网络地址/端口)只允许使用一次

Dha*_*jai 7 docker docker-compose

我正在尝试从这里运行 docker-compose.yml:https : //github.com/Project-Books/book-project#running-the-app

我尝试在 Intellij IDEA 社区版中运行 docker-compose 文件 - 使用Docker 插件 202.7319.5

这是使用的 docker-compose.yaml 文件:https : //github.com/Project-Books/book-project/blob/master/docker-compose.yml

以下是有关安装的 Docker Desktop 的详细信息:

OS: Windows
Version: 2.3.0.4(46911)
Channel: Stable
Engine: 19.03.12
Compose: 1.26.2
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到的输出:

ERROR: for book-project_mysql_1  Cannot start service mysql: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
ERROR: for mysql  Cannot start service mysql: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)

huy*_*tmb 12

“端口不可用:监听 tcp 0.0.0.0:3306”

端口 3306 已被使用。

在 docker-compose 文件中:

ports:
  - "3306:3306"   # Map TCP port 3306 in the container to port 3306 on the Docker host.
Run Code Online (Sandbox Code Playgroud)

尝试将主机上的映射端口更改为另一个端口(例如:3366):

version: '3'

services:
  mysql:
    image: mysql:latest
    hostname: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: bookproject
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpassword
    ports:
      - "3366:3306"
Run Code Online (Sandbox Code Playgroud)


n0n*_*vme 10

端口 3306 已被其他应用程序使用。您可以将 MySQL 部署到另一个端口。

示例 docker-compose:

version: '3'

services:
  mysql:
    image: mysql:latest
    hostname: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: bookproject
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpassword
    ports:
      - "3307:3306"
    volumes:
      - db_data:/var/lib/mysql
      - ./src/main/resources/db/init.sql:/data/application/init.sql
    command: --init-file /data/application/init.sql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    links:
      - mysql:db
    ports:
      - "8081:80"
  bookapp:
    build: ./
    restart: on-failure      
    ports: 
      - "8080:8080"
    environment:
      - WAIT_HOSTS=mysql:3307
      - WAIT_HOSTS_TIMEOUT=300
      - WAIT_SLEEP_INTERVAL=30
      - WAIT_HOST_CONNECT_TIMEOUT=30
      #- DEFAULT_PATH=<Target path in windows> 
    depends_on:
      - mysql
      - phpmyadmin
volumes:
  db_data:
Run Code Online (Sandbox Code Playgroud)


小智 5

我通过结束任务管理器中的“ mysqld.exe ”进程解决了这个问题。因为这个进程已经占用了3306端口。

首先,我必须找出哪个程序正在使用该端口。资源监视器的 Windows 集成 gui 在这里帮助了我。

这篇文章帮助了我