首页 > 解决方案 > SSL 握手在 docker 容器上不起作用

问题描述

docker我需要在需要的容器上调用一个资源L2TP/IPsec VPN。VPN 设置正常(我在直接从笔记本电脑调用时收到 200 状态代码响应)。但是后来我从 docker 容器连接卡住了ssl handshake.

我应该如何设置 docker so 容器,以便行为与我的笔记本电脑相同?

Python回溯

Traceback (most recent call last):
  File "/sp/server/env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
    self._validate_conn(conn)
  File "/sp/server/env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 844, in _validate_conn
    conn.connect()
  File "/sp/server/env/lib/python3.6/site-packages/requests/packages/urllib3/connection.py", line 326, in connect
    ssl_context=context)
  File "/sp/server/env/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/usr/local/lib/python3.6/ssl.py", line 407, in wrap_socket
    _context=self, _session=session)
  File "/usr/local/lib/python3.6/ssl.py", line 817, in __init__
    self.do_handshake()
  File "/usr/local/lib/python3.6/ssl.py", line 1077, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/local/lib/python3.6/ssl.py", line 689, in do_handshake
    self._sslobj.do_handshake()
socket.timeout: _ssl.c:835: The handshake operation timed out

dockerfiles/ServerDockerfile

FROM python:3.6-jessie

RUN pip install virtualenv

ADD . /sp
WORKDIR /sp/server

# Register api port
EXPOSE 8090

CMD make run

码头工人-compose.yml

version: '3'
services:
  server:
    restart: always
    build:
      context: .
      dockerfile: dockerfiles/ServerDockerfile
    volumes:
      - .:/sp
    ports:
      - "8090:8090"

我试图从docker我计算机上的其他容器中调用相同的资源,但情况总是相同 - 卡在ssl握手中。

标签: dockerssldocker-compose

解决方案


我通过将docker-compose.yml network_mode参数值设置为host.

码头工人-compose.yml:

version: '3'
services:
  server:
    restart: always
    build:
      context: .
      dockerfile: dockerfiles/ServerDockerfile
    volumes:
      - .:/sp  # mount repo dir to container for development
    ports:
      - "8090:8090"
    network_mode: "host"

推荐阅读