【发布时间】:2016-05-10 16:40:36
【问题描述】:
我已将 Docker 配置为使用 docker-compose.yml 运行 Postgres 和 Django,它运行良好。
我遇到的问题是 Selenium 无法连接到 Django liveserver。
现在(至少对我而言)django 必须访问 selenium 来控制浏览器而 selenium 必须访问 django 才能访问服务器是有道理的。
我已经尝试使用 docker 'ambassador' 模式,并使用以下 docker-compose.yml 配置从这里开始:https://github.com/docker/compose/issues/666
postgis:
dockerfile: ./docker/postgis/Dockerfile
build: .
container_name: postgis
django-ambassador:
container_name: django-ambassador
image: cpuguy83/docker-grand-ambassador
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
command: "-name django -name selenium"
django:
dockerfile: ./docker/Dockerfile-dev
build: .
command: python /app/project/manage.py test my-app
container_name: django
volumes:
- .:/app
ports:
- "8000:8000"
- "8081:8081"
links:
- postgis
- "django-ambassador:selenium"
environment:
- SELENIUM_HOST=http://selenium:4444/wd/hub
selenium:
container_name: selenium
image: selenium/standalone-firefox-debug
ports:
- "4444:4444"
- "5900:5900"
links:
- "django-ambassador:django"
当我检查http://DOCKER-MACHINE-IP:4444/wd/hub/static/resource/hub.html 我可以看到 firefox 启动了,但是所有测试都失败了,因为 firefox 无法连接到 django
'Firefox can't establish a connection to the server at localhost:8081'
我也在这里尝试过这个解决方案https://github.com/docker/compose/issues/1991 但这不起作用,因为我无法让 django 同时连接到 postgis 和 selenium
'django.db.utils.OperationalError: could not translate host name "postgis" to address: Name or service not known'
我尝试使用下面列出的网络功能
postgis:
dockerfile: ./docker/postgis/Dockerfile
build: .
container_name: postgis
net: appnet
django:
dockerfile: ./docker/Dockerfile-dev
build: .
command: python /app/project/manage.py test foo
container_name: django
volumes:
- .:/app
ports:
- "8000:8000"
- "8081:8081"
net: appnet
environment:
- SELENIUM_HOST=http://selenium:4444/wd/hub
selenium:
container_name: selenium
image: selenium/standalone-firefox-debug
ports:
- "4444:4444"
- "5900:5900"
net: appnet
但结果是一样的
'Firefox can't establish a connection to the server at localhost:8081'
那么我怎样才能让 selenium 连接到 django?
我已经玩了几天了 - 非常感谢任何帮助。
更多信息
另一个奇怪的事情是,当测试服务器运行 not 使用 docker(使用我的 virtualenv 等旧配置)如果我运行 ./manage.py test foo 我可以通过任何http://localhost:8081 的浏览器并获取网页,但如果我在 docker 下运行等效命令,则无法访问测试服务器。这很奇怪,因为我正在映射端口 8081:8081 - 这有关系吗?
注意:我使用的是 OSX 和 Docker v1.9.1
【问题讨论】:
标签: django selenium docker docker-compose