【问题标题】:Docker compose bind failed: port is already allocatedDocker compose bind 失败:端口已分配
【发布时间】:2019-05-24 04:44:27
【问题描述】:

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

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

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

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

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

Docker 文件

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 http://stackoverflow.com/a/30405787/2926832
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'

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:
    1. 获取“绑定 0.0.0.0:8080 失败:端口已分配”。

    您有重复的端口分配。

    1. 当不指定连接类型时,the port defaults to tcp: 表示 "0.0.0.0:8080:8080""0.0.0.0:8080:8080/tcp" 都试图绑定到同一个端口,因此会出现错误。

    2. 因为docker uses 0.0.0.0 for default binding,同样适用于"8080:8080/tcp""0.0.0.0:8080:8080/tcp" - 你不需要他们两个。

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

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

    我不确定应该调用什么服务

    这完全取决于您。通常服务以其内容或网络中的角色命名,例如nginx_proxylaravel_backend等。所以node_app听起来不错,app在小型网络中也可以,src似乎没有任何含义,但同样 - 它只是您的服务的一些标识符,没有任何附加效果。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您只需要打开 docker.yml 文件并更改您的端口地址.....这发生在我身上,因为该容器已被我公司的另一个成员使用

        示例来自 0.0.0.0:80==>0.0.0.0:8000 以及从端口:- 80/80 到端口:- 8000:8000

        【讨论】:

          猜你喜欢
          • 2022-11-19
          • 2018-02-20
          • 2017-05-22
          • 2018-08-10
          • 2022-06-22
          • 2022-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多