docker-compose后Nginx不运行服务器

时间:2018-10-21 13:37:28

标签: docker nginx

我正在学习如何部署Web应用程序,我已经使用nginx和gunicorn做了一次,一切都很完美,但是现在我不得不使用Docker来完成工作,而我陷入了困境。

当我在没有Docker的情况下安装nginx时,我只是运行:

sudo systemctl start nginx

然后我去了我的网络服务器,看到nginx正在运行。但是我不明白为什么我不能使用docker-compose做它?我转到一个特定的网址,但没有任何反应。当我访问时:

docker exec -ti nginx bash

它仍然存在,它不知道诸如sudo,systemctl,start等命令。

正确的方法是什么?我已经读了10篇文章,但仍然不了解如何部署和运行Web应用程序(虽然不在localhost上)。

2 个答案:

答案 0 :(得分:1)

您不需要ssh到nginx容器中并发出sudo systemctl start nginx command。启动容器后,nginx将自动启动。

这是一个简单的docker-compose.yml文件,用于启动nginx服务:

version: '3'
services:
  nginxserver:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - /opt/nginx:/usr/share/nginx/html:rw

运行以下命令以启动服务:

docker-compose -f docker-compose.yml up

该服务将启动,并且它将在http://localhost:8080/的localhost上可用(请参见上述yaml文件中的端口映射部分)

另请参见yaml文件中的卷映射部分。本地目录/opt/nginx映射到容器目录/usr/share/nginx/html,这是默认的nginx根目录。

/opt/nginx替换为所需的任何本地目录,然后在其中放置一个简单的index.html文件进行测试:

<html>
<body>
Hello world!
</body>
</html>

现在访问http://localhost:8080/,您应该会看到Hello world消息。使用该本地目录部署文件。

答案 1 :(得分:1)

  • 您不需要在docker容器中运行systemctl
  • docker restart <container name>就可以完成这项工作(如果您想重新启动nginx)
  • 您甚至不需要使用docker-compose来运行nginx
  • 您可以只运行docker run --name nginx -v /opt/nginx:/usr/share/nginx/html -p 8080:80 docker.io/nginx

现在卷曲http://<you machine ip>:8080应该可以工作