我是Docker的新手,我似乎无法让我的mariadb容器运行。我刚刚在运行High Sierra的Macbook Pro上安装了Docker。
我已经简单地使用了这个命令:
docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306
mariadb
应该创建一个图像并从中运行容器。但是我收到以下错误:
docker: Error response from daemon: driver failed programming
external connectivity on endpoint db
(d4d6631ae53d644b5c28a803d5814a792c7af6925ebcf84b61b49b4a0fe30f4b):
Error starting userland proxy: Bind for 0.0.0.0:3306 failed: port is
already allocated.
到目前为止,我可能在过去使用过MySQL,但我很确定我没有在3306端口上运行任何东西。
我还尝试过不添加-p标记,它会在我使用它时运行,但是当我执行docker ps
时,它会显示3306/tcp
而不是0.0.0.0:3306->3306/tcp
作为PORT。< / p>
我还尝试将标记移至-p 3306
,但这会在0.0.0.0:32769->3306/tcp
中将docker ps
显示为PORT。
我会喜欢一些帮助。提前谢谢。
答案 0 :(得分:3)
使用lsof
命令检查服务/进程是否正在使用端口3306
。
$ lsof -i tcp:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 721 krisnik 34u IPv4 0x348c24a60c9d72a9 0t0 TCP localhost:mysql (LISTEN)
现在杀死/停止服务。
kill -9 <PID>
重新运行Docker容器。它应该在释放所需端口时正常工作。
编辑 - 1
如果lsof
没有捕捉到该过程,也可以使用netstat
。
sudo netstat -lpn |grep :3306
kill -9 PID //PID processID used by 3306 Port