docker run vs docker-compose这些事情之一与其他都不一样

时间:2019-03-07 15:39:20

标签: docker nginx proxy docker-compose

我有一个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]

为什么?他们不一样吗?我想念什么?

2 个答案:

答案 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]