Nginx Docker卷为空

时间:2018-09-06 03:25:20

标签: mysql wordpress docker nginx volumes

使用docker-compose时,nginx不会像其他图像那样显示文件。

例如,对于Mysql,以下代码会将在/var/lib/mysql创建的数据保存到在./volumes/db/data的本地计算机上

./volumes/db/data:/var/lib/mysql

另一个示例,使用Wordpress,以下代码会将在/var/www/html/wp-content/uploads创建的数据保存到./volumes/uploads/data的本地计算机上

./volumes/uploads/data:/var/www/html/wp-content/uploads

尽管这不适用于nginx,所以无论我将/some/nginx/path更改为什么,它都永远不会出现在./volumes/nginx/data

./volumes/nginx/data:/some/nginx/path

nginx在这方面的工作方式是否有所不同?


更新

使用具有以下配置的命名卷可以解决此问题:

  • 在docker-compose文件的services部分中,我将./volumes/nginx/data:/some/nginx/path更改为nginx_data:/some/nginx/path

  • 然后我的volumes部分内容如下


volumes:
  nginx_data:
    driver: local
    driver_opts:
      o: bind
      device: ${PWD}/volumes/nginx/data

2 个答案:

答案 0 :(得分:0)

应该没有什么区别,卷正在将本地目录装载到容器中的目录。您可能没有正确安装,或者在nginx容器内部安装了错误的路径(nginx不使用的路径)。

基于https://docs.docker.com/samples/library/nginx/上的官方nginx docker图像文档,您应该安装到/ usr / share / nginx / html

class MyComponent {
  state = {
    error: false,
  }

  componentDidMount() {
    setTimeout(() => {
      this.setState({
        error: true,
      })
    }, 3000);
  }

  renderMessageError() {
    return <h1>Error</h1>
  }

  render() {
    if (this.state.error) {
      return this.renderMessageError();
    }

    return null; //
  }
}

另外,我将在您的docker-compose.yaml中包含完整路径:

void Increment(int);

int main()
{
    int count = 1;
    while(count < 10){
        cout << “ The number after “ << count; /* Function Increment adds 1 to count */
        Increment(count);
        cout << “ is “ << count << endl;
    }
    return 0;
}

void Increment (int nextNumber)
// Increment the parameter by 1
{
    nextNumber++;
}

如果仍然无法正常工作,则应在容器中执行并确认目录已安装:

$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

如果其中任何一个失败,我将查看docker日志以查看目录安装是否存在问题,也许是路径或权限问题。

volumes:
  - /full_path/volumes/nginx/data:/usr/share/nginx/html

---更新---

我运行了您正在使用的所有内容,并且一切正常:

$ docker exec -it <container_name> sh
$ df -h | grep nginx

# write data, confirm you see it on the docker host's directory
$ cd /usr/share/nginx/html
$ touch foo

# on docker host
$ ls /full_path/volumes/nginx/data/foo

-更新2- 很棒,您明白了,这篇文章似乎可以解释原因: docker data volume vs mounted host directory

  
    

主机目录从本质上说是依赖于主机的。因此,您无法从Dockerfile挂载主机目录,因为内置映像应该是可移植的。主机目录并非在所有潜在主机上都可用。

         

如果您要在容器之间共享某些持久性数据,或者要从非持久性容器中使用某些持久性数据,最好创建一个命名的数据卷容器,然后从中装入数据。

  

答案 1 :(得分:0)

在尝试创建一个将自己的Nginx配置放入etc / nginx的卷时,我也遇到了这个问题。虽然我从未发现真正的问题,但我认为这与如何从Dockerfile构建nginx有关。

我通过使用自己的Dockerfile扩展了原始文件并在构建时复制了配置文件来解决了这个问题。希望这会有所帮助。

FROM nginx:1.15.2

COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./global /etc/nginx/global
COPY ./conf.d /etc/nginx/conf.d