我有一个nginx代理设置,其外壳脚本看起来像这样
docker run --detach --name nginx-proxy --publish 80:80 --publish 443:443 --volume /etc/nginx/certs \
--volume /etc/nginx/vhost.d --volume /usr/share/nginx/html --volume /var/run/docker.sock:/tmp/docker.sock:ro --restart unless-stopped jwilder/nginx-proxy:alpine
echo proxy up
docker run --detach --name nginx-proxy-letsencrypt --volumes-from nginx-proxy --volume /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped jrcs/letsencrypt-nginx-proxy-companion
echo ssl companion up
docker run -d \
-e VIRTUAL_HOST=[domain] \
\-e "LETSENCRYPT_HOST=[domain]" \
-e "LETSENCRYPT_EMAIL=[emailaddress]" \
--name [domain] \
--expose 80 \
--restart always \
-v /code/[domain]:/var/www/html \
fauria/lamp
echo test site up at [domain]
,此站点可以正常运行,并且可以正常运行。 然后,我停止Web服务器容器并使用以下docker-compose.yaml,它失败并显示502。
version: '3.3'
services:
lamp:
restart: always
image: fauria/lamp
container_name: [domain]
expose:
- "80"
volumes:
- /code/[domain]:/var/www/html
environment:
- VIRTUAL_HOST=[domain]
- LETSENCRYPT_HOST=[domain]
- LETSENCRYPT_EMAIL=[emailaddress]
为什么?他们不一样吗?我想念什么?
答案 0 :(得分:0)
当您使用docker-compose时,docker-compose会为您创建一个docker网络,其中所有服务都可以相互通信。由于您只是停止了容器并使用docker-compose启动了它,所以现在它无法访问本地主机上的容器。这就是为什么您会收到502错误的原因。您需要做的是将其他容器添加到docker compose文件中,并确保使用正确的服务名称(而不是localhost使用http://service_name:443)连接到主机。或者,您可以通过某种方式使docker网络中的容器访问本地主机,但是我不确定如何执行此操作。也许您需要使用0.0.0.0而不是127.0.0.1?
答案 1 :(得分:0)
问题是我没有将docker-compose连接到默认情况下在代理映像中使用的网桥网络。
version: '3.3'
services:
lamp:
restart: always
image: fauria/lamp
network-mode: bridge
container_name: [domain]
expose:
- "80"
volumes:
- /code/[domain]:/var/www/html
environment:
- VIRTUAL_HOST=[domain]
- LETSENCRYPT_HOST=[domain]
- LETSENCRYPT_EMAIL=[emailaddress]