Expor um soquete Unix ao sistema host de dentro de um contêiner Docker

2

Gostaria de executar o servidor aweb dentro de um contêiner do Docker que escuta um soquete do Unix, em vez de uma porta. Estou encontrando muitos resultados sobre o compartilhamento do soquete do Docker, mas não acho que seja o que eu quero.

Eu quero que o sistema host seja capaz de se conectar ao soquete Unix que está sendo ouvido dentro do contêiner.

Estou usando o docker-compose, então a maneira usual de usar -v não funciona.

Minha configuração do site 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:

No entanto, diz que não consigo me conectar ao soquete, mesmo que ele exista neste local no host.

    
por Drazisil 05.11.2017 / 00:00

1 resposta

3

Você pode comunicar a máquina host ou até mesmo dois contêineres usando o mesmo soquete. No caso geral de dois contêineres, você deve iniciar as duas janelas de encaixe da máquina host compartilhando um volume que deve ser criado na máquina host.

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...

Ambos containerA e containerB agora podem usar soquetes como / var / run / common_socket_dir / socketX para interconectar. Naturalmente, a máquina host poderia usar os soquetes neste volume para se comunicar com os contêineres

    
por 05.11.2017 / 07:06