启动userland代理时出错:listen tcp0.0.0.0:3306:bind:已在使用的地址

时间:2016-06-18 11:21:52

标签: php apache docker laravel-5 docker-compose

错误:作为dockervel_mysql_1的不能重新启动容器 c258b418c03cbd6ec02c349c12cf09403f0eaf42fa9248019af7860d037d6474:的驱动程序无法编程端点dockervel_mysql_1 (da3dd576458aa1fe3af7b539c48b9d61d97432cf5e9ee02d78562851f53981ae)外部连接:电子的 RROR启动userland代理:listen tcp0.0.0.0:3306:bind:地址已在使用中。

我必须制作LAravel应用程序并提供Dockerfile,但我真的坚持这一点。在此之前,我曾在我的机器上安装laravel噩梦。

我试图获得dockervel图像,并且我按照这里的步骤操作: http://www.spiralout.eu/2015/12/dockervel-laravel-development.html

但是当我运行dartisan make:auth时,它会给出上面的错误。

我试图更改docker-compose.yml

中的默认端口
  

端口:

- "8084:80"

仍然没有,也试图在我的机器上停止apache2 (服务apache2停止),还尝试 docker-compose restart 并删除docker container dockervel_mysql_1。  我必须提到我已经完成了一个Laravel项目。在/ var / www / laravel。

请帮忙!

11 个答案:

答案 0 :(得分:19)

我有同样的问题和

sudo netstat -nlpt |grep 3306

向我展示了PID以及它由(mysgld)启动的服务。每当我试图杀死PID时,它就会再次启动。但是当我通过

停止服务时问题得到解决
sudo service mysql stop

请注意,您必须使用mysql而不是mysqld

我希望这会为你做到 - 我能够毫无问题地运行docker-compose up

答案 1 :(得分:10)

可能您已经在端口3306中运行了MySQL服务。您应该先关闭它 然后尝试结束docker-compose down并使用docker-compose up重新启动它 在使用dartisan make:auth

添加项目中的文件(例如dpermit)后,请务必更改权限

更新: 由于您已将端口更改为“8084”,因此应转至localhost:8084
如果您看到apache default,那么您可能正在浏览另一台服务器,因为dockervel是在nginx上构建的 你也可能在Docker上有一些差距。不要将本地存储与docker存储混合在一起。容器中的/var/www与您的本地/var/www不同。在docker-compose.yml中,您将本地~/dockervel/www挂载到容器/var/www 我建议您重新开始,并将您对Apache服务器所做的更改还原。关闭它,你不需要它。 Dockervel将在容器中为您提供NginX服务器。

答案 2 :(得分:7)

尝试使用端口3306杀死所有进程:

sudo kill `sudo lsof -t -i:3306`

然后,运行您的docker容器:

sudo docker-compose up

答案 3 :(得分:5)

我对此问题的解决方法是进入

docker-compose.yml

并更改 ports: -3306:3306ports: -3307:3306 然后再次运行此命令:

docker-compose up

答案 4 :(得分:4)

运行此命令的Ubuntu上的

将停止运行mysql以使docker容器正常工作。

sudo service mysqld stop  

然后,如果你的apache2正在运行,你需要停止服务,特别是当你想使用nginx时。

sudo service apache2 stop

然后,您可以运行docker-compose up -d ...命令

答案 5 :(得分:1)

您看到的错误来自侦听端口3306的本地mysql实例(当前在您的评论中的pid 1370上)。当它已被另一个进程使用时,您将无法运行在此主机端口上发布的容器。解决方案是在本地主机上停止mysql,或者更改/删除容器中的已发布端口。如果只有其他容器需要该端口,您可以将其保留为未发布状态,并且可以直接在docker专用网络上进行通信(默认情况下,这是“桥接”)。

答案 6 :(得分:1)

所以对我来说,当我尝试在docker容器中加载并运行MySQL映像时,我遇到了相同的错误: enter image description here

即使在系统偏好设置中停止本地mysql服务器后也无济于事: enter image description here 因为端口3306已由我的tomcat服务器使用,所以基本上您必须确保docker命令要使用的端口(在本例中为3306)不应被其他任何服务使用该命令将失败

答案 7 :(得分:0)

您需要更改mysql端口 因为您要在计算机上安装mysql,并且使用默认端口3306

现在您正在尝试使dockervel_mysql_1运行到相同的端口3306,这就是为什么在错误“地址已在使用中”中看到的原因

因此,例如,如果将dockervel_mysql_1端口更改为3307,它将正常运行,而无需停止在您的计算机上运行的mysql

答案 8 :(得分:0)

运行此命令为我解决了该问题:

docker swarm leave --force

说明: 我已经在本地主机中将docker swarm服务作为主节点启动了。 Swarm拥有网络优先权,并且已经在使用该端口

答案 9 :(得分:0)

第一个解决方案:

  sudo service mysql stop

然后运行

 docker-compose up 

启动应用程序,这是运行此mysql stop命令在端口3306端口上停止当前MySQL服务的快速解决方案,因此您的Docker应用程序可以使用相同的端口。

方案1:问题是,当您要同时运行以前运行的一个应用程序和现在要运行的下一个应用程序时,将无法运行。

方案1的第二种解决方案

如果您的下一个/当前应用程序来自docker,请尝试以下操作,而不会干扰3306端口的第一个应用程序mysql服务

从docker-compose.yml文件打开并更改MySQL端口

默认配置

ports:
      - ${SERVER_PORT_DB:-3306}:3306

更改的端口

 ports:
      - ${SERVER_PORT_DB:-3307}:3306

现在运行以下命令以启动应用程序

docker-composer up 

答案 10 :(得分:-1)

这对我有用,只是将应用程序的端口更改为 8084:80,如所描述的 here