windows Docker编写:mysql端口3306已被使用,容器端口使用主机端口?

w6lpcovy  于 2023-04-22  发布在  Windows
关注(0)|答案(1)|浏览(285)

我已经有一个Mysql在端口3306的主机上运行。

version: "3"
services:
  db:
    container_name: db_mysql
    image: mysql
    ports:
      - "3309:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456

容器msyql端口3306Map到主机端口3309。但错误:
docker ps -a

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Docker -组成

Can't start server: Bind on TCP/IP port: Address already in use
[ERROR] Do you already have another mysqld server running on port: 3306 ?

容器mysql端口3306是否仍在使用主机端口3306?
docker ps -a

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                     PORTS     NAMES
103f1e16c782   mysql     "docker-entrypoint.s…"   3 minutes ago   Exited (1) 3 minutes ago             db_mysql

如果端口被注解掉,则出现相同错误。

version: "3"
services:
  db:
    container_name: db_mysql
    image: mysql
    #ports:
      #- "3309:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456

更新

在主机上停止Mysql后,它工作了。这意味着Docker容器(mysql)使用主机端口3306?

2lpgd968

2lpgd9681#

我猜默认的网桥网络直接Map到本地mysql服务器使用的同一个网络。因此,在启动容器时会发生端口冲突。添加一个docker网络并使用它。
您可以使用docker network ls获取网络列表
然后,您可以使用docker network inspect <name>浏览每个docker网络的设置,其中name是您从ls命令中获得的网络名称之一。有许多内置网络,如bridge。当您不指定网络时,将使用bridge(假设没有其他本地配置更改此配置)。
在docker-compose编排中显式指定一个网络,这将创建一个网络供使用。通常,您需要多个网络来编排多个容器,例如在您有一些应用服务器,反向代理和后端数据库(如mysql)的情况下。

version: "3"
networks: 
  dbnet:
    external: false
services:
  db:
    container_name: db_mysql
    image: mysql
    networks:
      - dbnet
    ports:
      - 3309:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456

相关问题