当前位置: 首页 > 面试题库 >

docker-compose:为什么代理和应用服务由于主机名而失败?

许学真
2023-03-14
问题内容

以下是v2规范中的工作docker-compose文件:

version: '2'

volumes:
  webroot:
    driver: local


services:
  app: # Launch uwsgi application server
    build:
      context: ../../
      dockerfile: docker/release/Dockerfile
    links:
      - dbc
    volumes:
      - webroot:/var/www/someapp
    environment:
      DJANGO_SETTINGS_MODULE: someapp.settings.release
      MYSQL_HOST: dbc
      MYSQL_USER: todo
      MYSQL_PASSWORD: passwd
    command:
      - uwsgi
      - "--socket /var/www/someapp/someapp.sock"
      - "--chmod-socket=666"
      - "--module someapp.wsgi"
      - "--master"
      - "--die-on-term"

  test: # Run acceptance test cases
    image: shamdockerhub/someapp-specs
    links:
      - nginx
    environment:
      URL: http://nginx:8000/todos
      JUNIT_REPORT_PATH: /reports/acceptance.xml
      JUNIT_REPORT_STACK: 1
    command: --reporter mocha-jenkins-reporter

  nginx: # Start nginx web server that forwards https packets to uwsgi server
    build:
      context: .
      dockerfile: Dockerfile.nginx
    ports:
      - "8000:8000"
    links:
      - app
    volumes:
      - webroot:/var/www/someapp

  dbc: # Launch MySQL server
    image: mysql:5.6
    hostname: dbr
    expose:
      - "3306"
    environment:
      MYSQL_DATABASE: someapp
      MYSQL_USER: todo
      MYSQL_PASSWORD: passwd
      MYSQL_ROOT_PASSWORD: passwd

  agent: # Ensure DB server is runnin
    image: shamdockerhub/ansible
    links:
      - dbc
    environment:
      PROBE_HOST: "dbc"
      PROBE_PORT: "3306"
    command: ["probe.yml"]

条目在哪里

  MYSQL_HOST: dbc

  PROBE_HOST: "dbc"

看起来不直观,因为hostname设置为dbrdbc使用中

1)

app 服务失败,并出现以下使用错误 MYSQL_HOST: dbr

   django.db.utils.OperationalError: (2005, "Unknown MySQL server host 'dbr' (0)")

2)

agent 当以下代码时,服务也会失败 PROBE_HOST: "dbr"

set_fact:
      probe_host: "{{ lookup('env', 'PROBE_HOST') }}"
local_action: >
      wait_for host={{ probe_host }}

1)

为什么这两项服务的价值都在下降dbr

2)

如何使这两个服务与MYSQL_HOST: dbr 和一起使用 PROBE_HOST: "dbr"


问题答案:

这就是Docker的工作方式,因为hostname并不是唯一的,如果给两个容器提供相同的主机名,则会导致问题,因此compose将始终使用服务名称进行DNS解析



 类似资料:
  • 问题内容: 我在组成2.9(在yml版本2.1中)的“自定义”桥网络中的“ Ubuntu 16.10服务器”上运行多个容器。我的大多数容器在内部都使用相同的端口,因此我无法使用“主机”网络驱动程序。我的容器都是通过专用属性链接在一起的。 但是,我还需要访问容器外部公开的服务。这些服务具有专用URL,其名称已在我公司的DNS服务器中注册。虽然我可以使用公共DNS并从容器中访问任何公共服务没有问题,但

  • 问题内容: 我有一个docker- compose文件,该文件在同一主机中部署8个不同的docker服务。是否可以在不同的主机中部署它?我想在一个主机中远程部署某些服务,而在其他主机中远程部署其他服务。我需要使用docker- swarm吗?还是更简单的方法? 我已经阅读到可以使用DOCKER_HOST来完成此操作,但是如果我使用此变量配置/ etc / default / docker,则所有服

  • 我已经通过运行以下命令在CentOS 7上安装了docker, 注意:helloworld运行正常,没有问题。 但是,当我尝试运行(docker-compose.yml存在且有效)时,它只给我CentOS上的错误(Windows版本适用于docker-composefile)

  • 问题内容: 在我的文件中,具有以下内容。但是,容器不会选择主机名值。有任何想法吗? 当我检查容器中的主机名时,它没有启动。 问题答案: 我发现使用时主机名对其他容器不可见。事实证明这是一个已知问题(也许是一个已知功能),其中一部分讨论是: 我们可能应该在文档中添加有关使用主机名的警告。我认为它很少有用。 就容器网络而言,分配主机名的正确方法是定义一个别名,如下所示: 不幸的是,这 仍然 无法使用。

  • 在我的文件中,我有以下内容。但是容器没有选择主机名值。有什么想法吗? 当我检查容器中的主机名时,它不会拾取。

  • 问题内容: 每当我执行 我看到状态为“ UP”的容器。如果我做 我将看到更多详细信息,但状态相同。这两个命令之间有什么区别吗? 问题答案: docker-compose start (https://docs.docker.com/compose/reference/start/) 启动服务的现有容器。 docker-compose up (https://docs.docker.com/comp