Я хотел бы запустить веб-сервер внутри контейнера 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 для соединения. Конечно, хост-машина может использовать сокеты в этом томе для связи с контейнерами.