【问题标题】:Docker-compose port range forwardDocker-compose 端口范围转发
【发布时间】:2018-08-09 18:04:20
【问题描述】:

这里确实缺少文档。

ports:
  - "20000-20100"

适用于一个端口(只是“20000”不起作用。它似乎绑定到某个位置高于 40k 的随机端口),但我找不到可靠的方法来转发一系列端口而不仅仅是一个端口。

- "20000-20100"
- "10000-10100:20000-20100"
- "20000-20100:20000-20100"

这些都不起作用

我还在 Dockerfile 中暴露了 20000-30000,但我认为这并不重要。我在这里傻吗?这似乎是一件很容易的事情,但我已经苦苦挣扎了好几个小时,现在无法让连接正常工作。

编辑:

使用 - “20000-20010” 公开这些端口:

0.0.0.0:43809->20000/tcp, 0.0.0.0:43808->20001/tcp, 0.0.0.0:43807->20002/tcp, 0.0.0.0:43806->20003/tcp, 0.0.0.0 :43805->20004/tcp, 0.0.0.0:43804->20005/tcp, 0.0.0.0:43803->20006/tcp, 0.0.0.0:43802->20007/tcp, 0.0.0.0:43801->20008/ tcp, 0.0.0.0:43800->20009/tcp, 0.0.0.0:43799->20010/tcp

使用 - “20000-20010:20000-20010” 会公开这些端口:

0.0.0.0:20000-20010->20000-20010/tcp

这似乎是正确的,但我实际上无法与他们建立任何联系。

Edit2:Docker-compose

version: '3.2'
services:
  sshd:
    build: .
    ports:
      - "23:22"
      - "20000-20010:20000-20010"
    environment:
      REDIS_ADDRESS: redis
      DEBUG: 'sshd:*,ioredis:*'
  web:
    image: controller_web
    ports:
      - target: 3000
        published: 3000
        protocol: tcp
        mode: host
    environment:
      REDIS_ADDRESS: redis
      DEBUG: 'sshd:*,ioredis:*'
  redis:
    image: "redis"

Dockerfile

FROM node:alpine

# add openssh and clean
RUN apk add --update openssh \
&& rm  -rf /tmp/* /var/cache/apk/*

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
COPY package.json /usr/src/app/

RUN apk add --no-cache --virtual .gyp \
    python \
    make \
    g++

RUN npm install && npm cache clean --force
COPY . /usr/src/app

#make sure we get fresh keys
RUN rm -rf /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key

EXPOSE 22
EXPOSE 20000-30000
ENTRYPOINT ["sh", "entrypoint.sh"]
CMD ["npm", "start"]

【问题讨论】:

  • 你能发布你的 compose 文件和这个服务的 Dockerfile 吗?我刚刚自己测试过,一切都按预期工作。而且看起来文档很好 - docs.docker.com/compose/compose-file/#ports,它只是在你的情况下不起作用:)
  • 请具体说明“不起作用”,您如何测试它?您的容器内的应用是否在侦听所有这些端口并绑定到 0.0.0.0?
  • 添加了 Dockerfile 和 compose。它们还包括一些 sshd 的东西,这是我用来测试这些端口的东西

标签: docker docker-compose dockerfile


【解决方案1】:

我同意docker-compose ports documentation 没有提供有关端口范围映射语法的足够信息。要了解语法,请查看docker run documentation on ports

特别是,

- "20000-20100" means: Expose the container ports in the range 20000 to 20100 into random ports on the host machine
- "10000-10100:20000-20100" means: Expose the container ports in the range 20000 to 20100 into random ports on the host machine in the range of 10000 to 10100
- "20000-20100:20000-20100" similar to the above

在您的情况下,所有这些都应该允许您访问容器化应用程序

【讨论】:

  • 谢谢,很高兴知道这一点,尽管我已经自己解决了很多问题。我仍然对为什么它适用于单个端口而不适用于范围感到困惑。
猜你喜欢
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 2012-09-17
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2019-05-05
相关资源
最近更新 更多