Docker Compose绑定失败:端口已被占用。

7

我一直在尝试将一个socketio服务器从EC2迁移到Docker。

我已经能够通过web(http)客户端连接到socket,但是直接通过iOS或Android连接似乎是不可能的。

我读到其中一个问题可能是暴露的端口在使用Docker时实际上没有公开。由于我们的移动应用程序目前连接到我们传统的EC2实例上的端口8080,因此我设置了一个docker-compose.yml文件来尝试打开所有端口和通信协议,但我有两个问题:

1. 我不确定服务应该被称为什么,所以我选择了“src”(请参见下面的DockerFile)。但是想知道它是否应该为app,因为服务器文件是app.js?

2. 获取“绑定0.0.0.0:8080失败:端口已被分配”。

DockerFile

FROM ubuntu:14.04

ENV DEBIAN_FRONTEND noninteractive

RUN mkdir /src
ADD package.json /src

RUN apt-get update
RUN apt-get install --yes curl
RUN curl --silent --location https://deb.nodesource.com/setup_4.x | sudo bash -
RUN apt-get install --yes nodejs
RUN apt-get install --yes build-essential

RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10



RUN cd /src; npm install
RUN npm install --silent socket.io@0.9.14


WORKDIR /src




# Bundle app source
# Trouble with COPY https://dev59.com/nobca4cB1Zd3GeqPZbqp#30405787
COPY . /src

ADD app.js /src/


EXPOSE 8080

CMD ["node", "/src/app.js"]

Docker-Compose.yml

src:
  build: .
  volumes:
    - ./:/src
  expose:
    - 8080
  ports:
    - "8080"
    - "8080:8080/udp"
    - "8080:8080/tcp"
    - "0.0.0.0:8080:8080"
    - "0.0.0.0:8080:8080/tcp"
    - "0.0.0.0:8080:8080/udp"
  environment:
    - NODE_ENV=development
    - PORT=8080
  command:
    sh -c 'npm i && node server.js'
    echo 'ready'
3个回答

8
  1. 获取到“Bind for 0.0.0.0:8080 failed: port is already allocated”错误信息。

您已经重复分配了端口。

  1. 当没有指定连接类型时,端口默认为tcp意味着"0.0.0.0:8080:8080""0.0.0.0:8080:8080/tcp"都试图绑定到同一个端口,因此出现错误。

  2. 由于docker使用0.0.0.0进行默认绑定,因此对于"8080:8080/tcp""0.0.0.0:8080:8080/tcp"同样适用-您不需要两者都使用。

因此,您可以将ports部分缩小为:

   ports:
    - "8080:8080"
    - "8080:8080/udp"

我不确定服务应该叫什么名字

完全由您决定。通常,服务根据其内容或在网络中的角色进行命名,例如 nginx_proxylaravel_backend 等等。所以 node_app 对我来说听起来不错,app 在小型网络中也可以,src 似乎没有任何意义,但同样只是您服务的标识符,没有任何额外的影响。


7

您只是在相同的端口上运行了另一个容器。您可以通过docker ps查看它,并通过docker stop [CONTAINER ID]停止它。


0
你只需要打开docker.yml文件并更改端口地址即可......这发生在我身上是因为该容器已被我的公司另一成员使用。
例如,从0.0.0.0:80 ==> 0.0.0.0:8000 还要将端口从ports:- 80/80更改为ports:- 8000:8000。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接