【问题标题】:Docker container unable to access local host with specific portDocker 容器无法使用特定端口访问本地主机
【发布时间】:2021-11-21 11:26:53
【问题描述】:

在此之前,我的 docker 技能不是很好,如果答案很明显,请道歉。

TLDR:本地运行的网站,我需要指定要访问的端口,如何允许 docker 容器访问该网站?

更多信息:

我有两个在本地运行的网站:

  • 第一个是 localapp.company.com,它是一个 IIS 站点
  • 另一个是localnewapp.company.com,由vue-cli-service serve在本地运行,只能通过指定端口localnewapp.company.com:8081访问

我正在尝试通过 docker 容器并行化我们的 cypress 测试 其中{IPv4_ADDRESS} = 我的本地 IP 地址,这是我的 docker-compose.yml 文件:

version: '3.2'

services:
  cypress:
    build: .
    working_dir: /e2e
    extra_hosts:
       localnewapp.company.com: {IPv4_ADDRESS}
       localapp.company.com: {IPv4_ADDRESS}
    entrypoint: cypress run --headless --browser chrome --config-file ./cypress.json --record --key {KEY} --parallel --ci-build-id ${GITHUB_RUN_ID}
    volumes:
      - ./:/e2e

赛普拉斯可以运行针对 localapp 的测试,但针对 localnewapp 失败。

使用 Docker CLI,我尝试运行:

  • curl localapp.company.com 返回有效响应。
  • curl localnewapp.company.com:8081 连接失败。

不知道从这里去哪里。任何建议将不胜感激。


编辑: 澄清一下,在本地,node.exe 正在使用端口 8081,它在本地为网站提供服务。

【问题讨论】:

    标签: docker docker-compose cypress vue-cli


    【解决方案1】:

    您需要从您的cypress 服务中公开一个端口

    ports:
    - HOST_PORT:CONTAINER_PORT
    

    喜欢:

    version: '3.2' 
      services:
        cypress:
          ..
          volumes:
          - ./:/e2e
          ports:
          - 8081:8080
    

    documentation

    【讨论】:

    • 谢谢@dnltinney,我已经尝试过了,但出现以下错误:Error response from daemon: Ports are not available: listen tcp 0.0.0.0:8081: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
    • 端口8081 很可能正在使用中。您可以通过nc -zv localhost 8081 验证这一点。你试过不同的端口吗?
    • 端口 8081 正在被 localnewapp.company.com 使用,该端口通过命令 vue-cli-service serve 在本地运行,因此它与 node.exe 一起使用
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多