Docker-compose 无法从同一网络中的另一个容器访问网站容器

时间:2021-01-19 06:58:47

标签: docker selenium networking

我正在构建一个带有 2 个容器的 docker-compose。 ContainerA基于selenium和python在ContainerB中测试一个网站。但是我无法从测试容器中获取网页的内容,基本上我得到了一个空页面,但在本地机器的 swarm 之外访问它没有问题。

详情如下:

  1. 该网页基于 http/2 和自签名 sslr,并且在 /etc/nginx/templates/(从 Dockerfile 加载)中有一个上游设置:
server {
  listen 80 default_server;
  listen [::]:80 default_server;
  return 302 https://$host$request_uri;
}

server {
  listen 443 ssl http2 default_server;
  listen [::]:443 ssl http2 default_server;

  ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
  ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
  ssl_dhparam /etc/ssl/private/dhparam.pem;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_ecdh_curve secp384r1;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_stapling on;
  ssl_stapling_verify on;
  resolver 8.8.8.8 8.8.4.4 valid=300s;
  resolver_timeout 5s;
  add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;

  location /mygrpcchannel.Mygrpcchannel {
    proxy_pass http://mygrpcchannel;
    proxy_read_timeout 1d;
  }

  location / {
    root /usr/share/nginx/html;
    index index.html;
    try_files $uri $uri/ /index.html;
  }
}

upstream monosphere {
  server ${GRAVITY_IP}:8081;
}

这应该用于 grpc。

  1. 在 docker-compose 中:
     version: "3.7"
        services:
          setup:
            image: alpine:latest
            volumes:
              - ./:/mnt/setup
            command: >
              ash -c "mkdir -p /mnt/setup/tmp"
          mytest:
            build:
              context: .
              dockerfile: ./docker/mytest/Dockerfile
            depends_on:
              - setup
            volumes:
              - type: bind
                source: ./mytest
                target: /opt/mytest
            ports:
              - 8081:8081
        
          myweb:
            image: myweb:latest
            depends_on:
              - setup
              - mytest
            environment:
              UPSTREAM: mytest
            ports:
              - 8080:80
              - 8443:443
  1. 可以通过 Firefox 上的 https://localhost:8443 本地访问该页面(在 Chrome 上我不知道如何绕过非私密连接警告)。

  2. mytest 容器安装了 selenium 和 chromedriver。在那个容器内,我用 chrome 驱动程序启动了 selenium,然后尝试:

driver.get("https://myweb:443")

Selenium 返回 Finished Request,但 page_sourcetitle 为空。驱动程序本身应该没问题,因为我可以访问其他网站,例如 driver.get("https://google.com")

我不明白为什么我从测试容器中得到一个带有 https://myweb:443 的空页面。是不是跟证书和chromedriver有关?

感谢您的建议

0 个答案:

没有答案