【问题标题】:Make one Docker Compose service know the domain name of another让一个 Docker Compose 服务知道另一个的域名
【发布时间】:2016-07-06 18:09:33
【问题描述】:

我正在使用 Docker Compose 创建两个容器。一个运行一个为mydomain.com 网站提供服务的Nginx Web 服务器,第二个需要向第一个发送HTTP 请求(使用mydomain.com 域名)。

我不想每次运行 Nginx 容器时都检查它的 ip,然后在第二个容器上使用 docker run --add-host。我的目标是运行docker-compose up 并且一切准备就绪。

我知道这是不可能的,但我正在寻找的是:

# docker-compose.yml
nginx_container:
    ...

second_container:
    extra_hosts:
         # This is invalid. extra_hosts only accepts ips.
        - "mydomain.com:nginx_container"

【问题讨论】:

  • 不要重新发明轮子。为胜利而链接的容器。
  • 我的容器已链接。您能否详细说明仅此一项应该如何解决我的问题?
  • 独立启动你的 nginx,然后尝试: docker run -it --rm --link :www.test.com alpine /bin/ash 进入后你可以 ping www.test。 com就好了。并通过检查 /etc/hosts 来查看它是如何链接的。
  • 不要使用旧轮子 ;) 使用 Docker 网络,而不是链接 -docs.docker.com/compose/networking

标签: networking docker dns docker-compose hosts-file


【解决方案1】:

您可以使用这样的配置获得类似的结果:

version: "3"

services:    
  api:
    image: node:8.9.3
    container_name: foo_api
    domainname: api.foo.test
    command: 'npm run dev'
    links:
      - "mongo:mongo.foo.test"
      - "redis:redis.foo.test"
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "${PORT}:3000"
      - "9229:9229"
    depends_on:
      - redis
      - mongo
    networks:
      - backend

  redis:
    image: redis:3
    container_name: foo_redis
    domainname: redis.foo.test
    ports:
      - "6379:6379"
    networks:
      - backend

  mongo:
    image: mongo:3.6.2
    container_name: foo_mongo
    domainname: mongo.foo.test
    ports:
      - "${MONGO_PORT}:27017"
    environment:
      - MONGO_PORT=${MONGO_PORT}
    networks:
      - backend

networks:
  backend:
    driver: bridge

【讨论】:

    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2023-04-03
    • 1970-01-01
    • 2018-11-08
    相关资源
    最近更新 更多