由于端口已绑定,docker/compose image容器未启动服务

由于端口已绑定,docker/compose image容器未启动服务,docker,docker-compose,drone,drone.io,Docker,Docker Compose,Drone,Drone.io,我有以下设置: 第一台机器。Docker服务器与Github集成 第二台机器。使用docker agent进行生产,其启动方式如下: docker run -d -e DRONE_SERVER=<ip:host> -e DRONE_SECRET=<secret> -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name=drone-agent

我有以下设置:

第一台机器。Docker服务器与Github集成

第二台机器。使用docker agent进行生产,其启动方式如下:

docker run -d 
    -e DRONE_SERVER=<ip:host>
    -e DRONE_SECRET=<secret> 
    -v /var/run/docker.sock:/var/run/docker.sock 
    --restart=always 
    --name=drone-agent
      drone/agent:0.8 agent
docker运行-d
-无人机服务器=
-e雄蜂_秘密=
-v/var/run/docker.sock:/var/run/docker.sock
--重新启动=始终
--名称=无人机代理
无人机/代理:0.8代理
具有以下内容的回购。drone.yml:

pipeline:
  run:
    image: docker/compose:1.21.2
    commands:
      - cd <dir_with_docker-compose.yml>
      - docker-compose up -d <service_name>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    when:
      branch: [<branch_name>]
管道:
运行:
图片:docker/compose:1.21.2
命令:
-光盘
-docker compose up-d
卷数:
-/var/run/docker.sock:/var/run/docker.sock
什么时候:
分行:[]
因此,当我使用这个.drone.yml触发构建时,我得到以下输出:

cd <dir_with_docker-compose.yml>
docker-compose up -d <service_name>
Starting docker_<service_name>_1 ...
Starting docker_<service_name>_1 ... error

ERROR: for docker_<service_name>_1  Cannot start service <service_name>: driver failed programming external connectivity on endpoint docker_<service_name>_1 
(<hash>): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use

ERROR: for <service_name>  Cannot start service <service_name>: driver failed programming external connectivity on endpoint docker_<service_name>_1
(<hash>): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
Encountered errors while bringing up the project.
cd
docker compose up-d
正在启动docker\uuu 1。。。
正在启动docker\uuu 1。。。错误
错误:对于docker\uu 1,无法启动服务:驱动程序未能在端点docker\uu 1上编程外部连接
():启动userland代理时出错:侦听tcp 0.0.0.0:80:绑定:地址已在使用中
错误:for无法启动服务:驱动程序未能在端点docker\uu 1上编程外部连接
():启动userland代理时出错:侦听tcp 0.0.0.0:80:绑定:地址已在使用中
在启动项目时遇到错误。
但如果我在
cd
docker compose up-d
之间插入
docker ps
netstat-tulpn
,服务将成功启动


为什么会发生这种情况?

错误消息表示其他人已经在使用该端口。由于所讨论的端口似乎是80,我猜您有一个正在运行的Web服务器。有很多方法可以确定哪些程序正在使用端口(如果它是docker容器,
docker ps-a
应该向您展示),我会尝试其中一种方法并关闭有问题的进程,然后再次尝试启动docker系统。如果错误消失,则您已识别出肇事者

我不知道你的docker图片中到底是什么,但也可能是它们相互冲突。我相信Docker会自动为图像分配一个随机空闲端口,但只有在未指定端口的情况下。因此,如果程序集中有多个容器试图绑定80,这就是问题所在。我会仔细查看你的docker文件和docker compose,看看是否有人在使用80。您可以使用
Docker run-p 12345 container\u NAME
显式要求Docker将容器绑定到任意端口。您的run命令中确实有
-e DRONE\u SERVER=
,但IIRC这会设置一个环境变量,因此Docker可能会忽略您指定的端口。因此,基本上,对于您正在执行的所有run命令,包括一个参数,如
-p 12345
(为每个容器使用不同的数字),并更改
docker compose.yml
中的端口。如果解决了这个问题,请查找以前使用
-p80运行的容器,或者docker compose中指定了端口80的位置


请注意,如果您不小心尝试运行同一个Docker映像两次,新实例当然会与旧实例冲突,因为它们都会尝试使用相同的端口(除非未指定端口,在这种情况下Docker能够自动解决冲突)。因为我看到了
docker\uuu 1
(特别是
\u1
),我怀疑您已经在该设置上运行了
docker compose运行
,忘记删除它,然后再次运行它。基本上,您应该关闭与此docker compose相关的所有容器并将其删除。类似于Portainer的GUI可能会对此有所帮助。

无人机代理正在与远程无人机服务器通信。无人机服务器正在监听9000个端口,docker代理正在暴露3000个端口。在构建过程中,我只创建了一个容器,因此docker compose的服务之间不应该存在端口限制。奇迹是,
docker ps
netststat-tulpn
解决了端口的问题binding@IgorNikolaev等等,简单地打印一些状态来修复它?@ IGORIKOLAEV很奇怪,但是恭喜它被固定了。好吧,我不认为它是固定的)(这样)