首页 > 解决方案 > 访问没有端口号的 docker-compose extra_hosts

问题描述

我在我的 docker-compose 中添加了一些额外的主机,现在看起来像这样:

version: '3'
services:
  memcached:
    image: memcached:1.5.2-alpine
    restart: always
    ports:
      - "11211:11211"

  postgres:
    image: postgres:9.4-alpine
    restart: always
    volumes:
      - ~/.engine-data/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=myapp_development
      - POSTGRES_USER=default
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:3.2.0-alpine
    restart: always
    volumes:
      - ~/.engine-data/redis:/data
    ports:
      - "6379:6379"

  web:
    build:
      context: .
      dockerfile: "Dockerfile"
    command: ./wait-for-it.sh redis:6379 -- ./wait-for-it.sh postgres:5432 -- bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/opt/apps/engine
    depends_on:
      - memcached
      - redis
      - postgres
    ports:
      - "3000:3000"
    env_file:
      - .env
    extra_hosts:
     - "my.api:127.0.0.1"
     - "my.webapp:127.0.0.1"

我的意图是使用 my.webapp 访问网络,而不使用 localhost:3000。但不是那样,我得到的是在 my.webapp:3000 运行的网络应用程序

如何避免端口号?

标签: ruby-on-railsdockerdocker-composeport

解决方案


使用 http 时,如果 URL 中未指定数字,您的浏览器将使用默认端口 80。

如果要使用非标准端口,则必须在 URL 中指定。

例如,如果我的网络服务器在 www.example.com 主机的 80 端口上运行,我可以在浏览器中输入http://www.example.com/,它就可以连接到 80 端口。

如果我使用的是非标准端口(如 3000),那么我必须输入如下 URL:http ://www.example.com:3000/

在您的情况下,不必指定端口 3000,您应该更新您的 compose 文件以发布到主机的端口 80 而不是主机的端口 3000。docker 和 docker-compose 中的端口发布采用 : 格式。这意味着您需要在 compose 文件中切换 from3000:300080:3000重新运行docker-compose up -d.

您还提到希望使用“my.webapp”主机名而不是“localhost”主机名来访问您的服务。您可以通过在您的计算机上添加主机文件条目来实现此目的,以便“my.webapp”解析为 127.0.0.1。您还可以使用任何其他数量的 DNS 名称解析方法来实现相同的目的。


推荐阅读