【问题标题】:docker-compose referencing wrong portsdocker-compose 引用错误的端口
【发布时间】:2017-06-05 10:08:14
【问题描述】:

我在一台主机上运行多个 docker-compositions(不同用例的相同图像)。

出于这个原因,我使用不同的 HTTPS (+REST) 端口,这些组合可以在远程使用。但是,docker 也会在所有其他组合中引用第一个组合的端口范围,但不会使用它。虽然我看不到任何负面影响atm,但我想摆脱它,担心最终可能会产生一些影响。

docker ps 显示了这个

PORTS     
Second container:                                        
**8643-8644/tcp**, 0.0.0.0:8743-8744->8743-8744/tcp   
0.0.0.0:27020->27020/tcp                          

First container:
0.0.0.0:**8643-8644->8643-8644**/tcp                  
0.0.0.0:27019->27019/tcp 

第一个 docker-compose 文件(摘录):

version: '2'
services:
  mongo:
    image: *****
    ports:
      - "27019:27019"
    tty: true
    volumes:
      - /data/mongodb
      - /data/db
      - /var/log/mongodb
    entrypoint: [ "/usr/bin/mongod", "--port", "27019" ]
  rom:
    image: *****
    links:
      - mongo
    ports:
      - "8643:8643"
      - "8644:8644"
    environment:
      WEB_PORT_SECURE: 8643
      REST_PORT_SECURE: 8644
      MONGO_PORT: 27019
      MONGO_INST: mongod
    entrypoint: [ "node", "/usr/src/app/app.js" ]

第二个 docker-compose 文件(摘录):

version: '2'
services:
    mongo:
        image: *****
        ports:
          - "27020:27020"
        tty: true
        volumes:
          - /data/mongodb
          - /data/db
          - /var/log/mongodb
        entrypoint: [ "/usr/bin/mongod", "--port", "27020" ]
      rom:
        image: *****
        links:
          - mongo
        ports:
          - "8743:8743"
          - "8744:8744"
        environment:
          WEB_PORT_SECURE: 8743
          REST_PORT_SECURE: 8744
          MONGO_PORT: 27020
          MONGO_INST: mongod
        entrypoint: [ "node", "/usr/src/app/app.js" ]

最后,docker inspect 为第二个容器显示了这个

"Config": {
    "Hostname": *****,
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "ExposedPorts": {
        "8643/tcp": {},
        "8644/tcp": {},
        "8743/tcp": {},
        "8744/tcp": {}
    },
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
        "MONGO_PORT=27020",
        "MONGO_INST=mongodb",
        "WEB_PORT_SECURE=8743",
        "REST_PORT_SECURE=8744",
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "NPM_CONFIG_LOGLEVEL=info",
        "NODE_VERSION=4.7.2",
        "WORK_DIR=/usr/src/app"
    ],

"NetworkSettings": {
"Ports": {
    "8643/tcp": null,
    "8644/tcp": null,
    "8743/tcp": [
        {
            "HostIp": "0.0.0.0",
            "HostPort": "8743"
        }
    ],
    "8744/tcp": [
        {
            "HostIp": "0.0.0.0",
            "HostPort": "8744"
        }
    ]
},

最后一个块清楚地表明 docker 没有对 8643 和 8644 端口做任何事情,但仍然在那里引用它。

"8643/tcp": null,
"8644/tcp": null,

知道为什么会发生这种情况以及如何避免吗?

【问题讨论】:

    标签: docker tcp docker-compose multiple-instances ports


    【解决方案1】:

    它们在那里是因为图像暴露了它们(使用EXPOSE 构建)。

    这不是问题,完全正常。除非您尝试在外部主机上多次导出相同的端口,否则您不会遇到问题。在这里,您导出的端口都没有冲突。

    0.0.0.0:8743-8744->8743-8744/tcp   
    0.0.0.0:27020->27020/tcp                          
    0.0.0.0:8643-8644->8643-8644/tcp                  
    0.0.0.0:27019->27019/tcp 
    

    您正在导出 8643-8644、8743-8744、27019、27020。没有冲突。

    一个容器可以暴露它想要的任何端口,唯一重要的是暴露的端口不会相互冲突。

    【讨论】:

    • 我没有意识到这是在构建时保存的。感谢您清理它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2019-10-24
    • 2019-03-05
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多