从 Docker 容器内部向主机系统公开 Unix 套接字

从 Docker 容器内部向主机系统公开 Unix 套接字

我想在 Docker 容器内运行一个 Web 服务器,该服务器监听 Unix 套接字,而不是端口。我发现了很多有关共享 Docker 套接字的结果,但我认为这不是我想要的。

我希望主机系统能够连接到容器内部正在监听的 Unix 套接字。

我正在使用docker-compose,所以通常的使用方式-v不起作用。

我的 ngix 站点配置:

server {                                                                                             
   listen 80; listen [::]:80;                                                            
    server_name foo.com www.foo.com;

    location / {                                                                         
        proxy_pass http://unix:/var/lib/docker/volumes/app_shared/_data/app.https.sock:;       
        proxy_set_header Host $http_host;                                                            
        proxy_http_version 1.1;                                                                      
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                 
        proxy_set_header X-Forwarded-Proto https;                                                    
    } 

docker-compose.yml

version: '3'
services:      
  web:
    build: .
    volumes:
            - shared:/var/app
    command: "npm start"
volumes:
   shared:

但是它说我无法连接到套接字,即使它存在于主机上的这个位置。

答案1

您可以使用同一个套接字与主机甚至两个容器进行通信。在两个容器的一般情况下,您应该从主机启动两个 Docker,并共享一个应在主机中创建的卷。

docker run --name "containerA" -v /var/run/common_socket_dir:/var/run/common_socket_dir...
docker run --name "containerB" -v /var/run/common_socket_dir:/var/run/common_socket_dir...

容器 A 和容器 B 现在都可以使用 /var/run/common_socket_dir/socketX 等套接字进行互连。当然,主机可以使用此卷中的套接字与容器进行通信

相关内容