使用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
答案 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