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