You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWX Docker Compose部署PostgreSQL DNS解析失败问题求助

AWX容器重建后无法连接Web界面,DNS配置导致数据库解析失败

问题背景

通过Docker Compose部署AWX,修改docker-compose.yml强制awx_web容器向/etc/resolv.conf写入特定DNS IP后,执行命令:

docker pull; docker compose up -d

容器重建后无法访问AWX Web界面,尝试过停止重启容器、重载nginx并确认运行状态、调整docker-compose.yml重建容器、通过awx/installer/install.yml重新部署,均无法解决,始终显示服务器错误。

错误日志

awx_web日志

执行awx logs awx_web得到以下内容:

self.connect()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/base/base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known

RESULT 2
OKREADY
2023-03-15 02:16:01,844 INFO exited: wsbroadcast (exit status 1; not expected)
2023-03-15 02:16:01,844 INFO exited: wsbroadcast (exit status 1; not expected)
2023-03-15 02:16:02,848 INFO spawned: 'wsbroadcast' with pid 7561
2023-03-15 02:16:02,848 INFO spawned: 'wsbroadcast' with pid 7561
2023-03-15 02:16:03,850 INFO success: wsbroadcast entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2023-03-15 02:16:03,850 INFO success: wsbroadcast entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

PostgreSQL日志

PostgreSQL Database directory appears to contain a database; Skipping initialization

2023-03-15 02:14:16.396 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2023-03-15 02:14:16.396 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2023-03-15 02:14:16.404 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-03-15 02:14:16.432 UTC [26] LOG:  database system was shut down at 2023-03-15 02:13:50 UTC
2023-03-15 02:14:16.440 UTC [1] LOG:  database system is ready to accept connections

Docker网络信息

执行docker network ls得到:

NETWORK ID     NAME                 DRIVER    SCOPE
5c661c37460f   awxcompose_default   bridge    local
6e91f0243cfd   bridge               bridge    local
0f6ab0c7ce0f   host                 host      local
5c7e12dba410   none                 null      local

界面报错

访问AWX主页显示服务器错误(页面提示"There was a problem with your request")

当前docker-compose.yml配置

services:

  web:
    image: ansible/awx:15.0.0
    container_name: awx_web
    depends_on:
      - redis
      - postgres
    ports:
      - "80:8052"
      - "443:443"
    hostname: awxweb
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "~/.awx/awxcompose/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "~/.awx/awxcompose/environment.sh:/etc/tower/conf.d/environment.sh"
      - "~/.awx/awxcompose/credentials.py:/etc/tower/conf.d/credentials.py"
      - "~/.awx/awxcompose/nginx.conf:/etc/nginx/nginx.conf:ro"
      - "~/.awx/awxcompose/redis_socket:/var/run/redis/:rw"
      - "/var/lib/awx/projects:/var/lib/awx/projects:rw"
      - "./resolv.conf:/etc/resolv.conf"  
    dns:
     - 127.0.0.11
    environment:
      http_proxy:
      https_proxy:
      no_proxy:

  task:
    image: ansible/awx:15.0.0
    container_name: awx_task
    depends_on:
      - redis
      - web
      - postgres
    command: /usr/bin/launch_awx_task.sh
    hostname: awx
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "~/.awx/awxcompose/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "~/.awx/awxcompose/environment.sh:/etc/tower/conf.d/environment.sh"
      - "~/.awx/awxcompose/credentials.py:/etc/tower/conf.d/credentials.py"
      - "~/.awx/awxcompose/redis_socket:/var/run/redis/:rw"
      - "/var/lib/awx/projects:/var/lib/awx/projects:rw"
    dns:
      #- 10.1.2.3
      #- 10.2.3.4
       - 127.0.0.11
    environment:
      http_proxy:
      https_proxy:
      no_proxy:
      SUPERVISOR_WEB_CONFIG_PATH: '/etc/supervisord.conf'

  redis:
    image: redis
    container_name: awx_redis
    restart: unless-stopped
    environment:
      http_proxy:
      https_proxy:
      no_proxy:
    command: ["/usr/local/etc/redis/redis.conf"]
    volumes:
      - "~/.awx/awxcompose/redis.conf:/usr/local/etc/redis/redis.conf:ro"
      - "~/.awx/awxcompose/redis_socket:/var/run/redis/:rw"

  postgres:
    image: postgres:10
    container_name: awx_postgres
    restart: unless-stopped
    volumes:
      - "~/.awx/pgdocker/10/data/:/var/lib/postgresql/data:Z"
    environment:
      POSTGRES_USER: awx
      POSTGRES_PASSWORD: awxpass
      POSTGRES_DB: awx
      http_proxy:
      https_proxy:
      no_proxy:

volumes:
  supervisor-socket:
  rsyslog-socket:
  rsyslog-config: 

解决方案

核心问题原因

挂载自定义resolv.conf覆盖了容器默认配置,导致Docker内置DNS解析器(127.0.0.11)无法正常工作,进而无法解析Docker Compose自动创建的服务名称(如postgres)。

修复步骤

  1. 移除自定义resolv.conf挂载:在awx_web服务的volumes中删除- "./resolv.conf:/etc/resolv.conf"这一行。
  2. 正确配置DNS:如果需要指定外部DNS,直接通过dns字段配置,无需挂载resolv.conf。例如:
    dns:
      - 127.0.0.11
      - 你的外部DNS地址
    
    注意必须保留127.0.0.11,这是Docker内置的DNS解析器,负责解析容器服务名称。
  3. 重建容器:执行命令:
    docker compose down
    docker compose up -d
    
  4. 验证解析:进入awx_web容器测试postgres解析:
    docker exec -it awx_web ping postgres
    
    若能正常ping通,说明解析恢复。

补充说明

  • Docker Compose默认会为每个服务创建一个自定义网络(这里是awxcompose_default),服务名称可以直接通过内置DNS解析。
  • 挂载/etc/resolv.conf会破坏容器的DNS配置,除非你的自定义resolv.conf中包含nameserver 127.0.0.11,否则无法解析服务名称。

内容的提问来源于stack exchange,提问作者ficestat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 08:14:56