Docker, Django e Selenium - o Selenium não pode se conectar
Eu tenho o Docker configurado para executar o Postgres e o Django usando o docker-compose.yml e está funcionando bem.
O problema que estou tendo é que o Selenium não consegue se conectar ao servidor do Django.
Agora faz sentido (pelo menos para mim) que o django precise acessar o selenium para controlar o navegador e o selenium tenha que acessar o django para acessar o servidor.
Tentei usar o padrão 'embaixador' do docker usando a seguinte configuração para o docker-compose.yml a partir daqui: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"
Quando eu checohttp: // DOCKER-MACHINE-IP: 4444 / wd / hub / static / resource / hub.html Eu posso ver que o firefox é iniciado, mas todos os testes falham porque o firefox não consegue se conectar ao django
'Firefox can't establish a connection to the server at localhost:8081'
Eu também tentei esta solução aquihttps://github.com/docker/compose/issues/1991 no entanto, isso não está funcionando porque não consigo fazer com que o django se conecte ao postgis e ao selênio ao mesmo tempo
'django.db.utils.OperationalError: could not translate host name "postgis" to address: Name or service not known'
Tentei usar o recurso de rede conforme listado abaixo
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
Mas o resultado é o mesmo
'Firefox can't establish a connection to the server at localhost:8081'
Então, como posso obter o selênio para conectar-se ao django?
Estou brincando com isso há dias - realmente aprecio qualquer ajuda.
Mais informações
Outra coisa estranha é que, quando o servidor de testes está sendo executadonão usando docker (usando minha antiga configuração de virtualenv etc.), se eu executar ./manage.py test foo, posso acessar o servidor através de qualquer navegador emhttp: // localhost: 8081 e ser exibido nas páginas da web, mas não consigo acessar o servidor de teste quando executo o comando equivalente se o executar no docker. Isso é estranho, porque estou mapeando a porta 8081: 8081 - isso está relacionado?
Nota: Estou usando o OSX e o Docker v1.9.1