Назад | Перейти на главную страницу

Предоставление сокета Unix хост-системе изнутри контейнера Docker

Я хотел бы запустить веб-сервер внутри контейнера Docker, который слушает сокет 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:

Тем не менее, он говорит, что я не могу подключиться к сокету, даже если он существует в этом месте на хосте.

Вы можете обмениваться данными с хост-машиной или даже с двумя контейнерами, используя один и тот же сокет. В общем случае двух контейнеров вы должны запускать два докера с хост-машины, совместно использующей том, который должен быть создан на хост-машине.

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

Оба, containerA и containerB теперь могут использовать сокеты как / var / run / common_socket_dir / socketX для соединения. Конечно, хост-машина может использовать сокеты в этом томе для связи с контейнерами.