我想在 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 等套接字进行互连。当然,主机可以使用此卷中的套接字与容器进行通信