我已经配置了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。
当我检查http://DOCKER-MACHINE-IP:4444/wd/hub/static/resource/hub.html时,我可以看到Firefox启动了,但是所有的测试都失败了,因为Firefox无法连接到Django。
我也尝试了这个解决方案https://github.com/docker/compose/issues/1991,但是它不起作用,因为我无法让Django同时连接到PostGIS和Selenium。
我尝试使用以下列出的网络功能。
但结果是相同的。
那么如何让selenium连接到django呢?
我已经在尝试了几天,真的很需要帮助。
更多信息:
另一个奇怪的事情是,当测试服务器不使用docker(使用旧的虚拟环境配置等)运行时,如果我运行./manage.py test foo,我可以通过http://localhost:8081在任何浏览器中访问服务器并获取网页,但是如果我在docker下运行相同的命令,则无法访问测试服务器。这很奇怪,因为我正在映射端口8081:8081 —— 这是否相关?
注意:我正在使用OSX和Docker v1.9.1
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呢?
我已经在尝试了几天,真的很需要帮助。
更多信息:
另一个奇怪的事情是,当测试服务器不使用docker(使用旧的虚拟环境配置等)运行时,如果我运行./manage.py test foo,我可以通过http://localhost:8081在任何浏览器中访问服务器并获取网页,但是如果我在docker下运行相同的命令,则无法访问测试服务器。这很奇怪,因为我正在映射端口8081:8081 —— 这是否相关?
注意:我正在使用OSX和Docker v1.9.1