使用 docker-machine 但不是在 ssh 服务器上时出错:您是否正在尝试将目录挂载到文件上(或反之亦然)?
Error when using docker-machine but not on ssh server: Are you trying to mount a directory onto a file (or vice-versa)?
我正在运行在ubuntu(ec2-instance)服务器上使用nginx 运行安装一个docker化的django 应用程序。我的想法是用 docker-machine.
部署
当我通过 ssh 进入我的 EC2 并将我的应用程序复制到那里,然后启动我的 docker-compose 文件时,一切正常,应用程序 运行 完美无缺。但是我想在不使用 ssh 进入服务器的情况下启动我的容器,而是使用 docker 机器。
当我将执行命令指向我的 EC2 实例和 运行 相同的命令 (docker-compose -f production.yml up --build
) 时,我收到以下错误:
Cannot start service production-nginx-container: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \"/Users/myuser/myfolder/myproject/compose/production/nginx/myconf.conf\" to rootfs \"/var/lib/docker/overlay2/44675a2cf4ac6e3052c9df3bd6fbb35b1ece33736d632199572c6a1c90965c12/merged\" at \"/var/lib/docker/overlay2/44675a2cf4ac6e3052c9df3bd6fbb35b1ece33736d632199572c6a1c90965c12/merged/etc/nginx/conf.d/default.conf\" caused \"not a directory\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
我认为 docker 抱怨的是这一行:
- ./compose/production/nginx/myconf.conf:/etc/nginx/conf.d/default.conf
我正在尝试将我的配置从我的 nginx 文件映射到 nginx docker 容器的默认配置中。 myconf.conf 在那里,它是一个文件。
我的猜测是将文件从本地计算机加载到服务器上的容器时出现问题?但我不知道如何解决这个问题……此外,关于此错误的其他问题也无济于事。
我 运行 和 docker 机器指向实例的命令不应该做完全相同的事情,就像我通过 ssh 进入我的实例并 运行 它来自那里?不幸的是,我对 docker 的了解有限。如果有人能帮我一把,我将不胜感激。
非常感谢,请在下面查看我的配置:
production-nginx-container:
container_name: 'production-nginx-container'
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./compose/production/nginx/myconf.conf:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt/live/mydomain.de/fullchain.pem:/etc/letsencrypt/live/mydomain.de/fullchain.pem
- /etc/letsencrypt/live/mydomain.de/privkey.pem:/etc/letsencrypt/live/mydomain.de/privkey.pem
depends_on:
- django
即使您使用远程 $DOCKER_HOST
Docker 也无法将本地内容挂载到远程容器。 docker run -v
选项和 Docker Compose volumes:
绑定安装始终被视为 Docker 守护程序所在的主机上的路径 运行ning,而不是你 运行宁docker
命令。您需要将配置文件和 TLS 证书等内容复制到远程主机,在执行此操作时,您也可以使用 ssh 来启动容器。
您可能会考虑 Ansible、Chef 或 Salt Stack 等自动化工具是否满足您的需求。这些通常具有用于 "make sure this file is on the remote system" 和 "start this container on some remote system" 的内置工具。我不建议使用 Docker 机器,除非在特定情况下需要本地 VM 到 运行 Docker(通常通过 Docker 工具箱应用程序,在 Windows 7 或其他没有 "native" Docker 应用程序可以使用的环境)。
我正在运行在ubuntu(ec2-instance)服务器上使用nginx 运行安装一个docker化的django 应用程序。我的想法是用 docker-machine.
部署当我通过 ssh 进入我的 EC2 并将我的应用程序复制到那里,然后启动我的 docker-compose 文件时,一切正常,应用程序 运行 完美无缺。但是我想在不使用 ssh 进入服务器的情况下启动我的容器,而是使用 docker 机器。
当我将执行命令指向我的 EC2 实例和 运行 相同的命令 (docker-compose -f production.yml up --build
) 时,我收到以下错误:
Cannot start service production-nginx-container: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \"/Users/myuser/myfolder/myproject/compose/production/nginx/myconf.conf\" to rootfs \"/var/lib/docker/overlay2/44675a2cf4ac6e3052c9df3bd6fbb35b1ece33736d632199572c6a1c90965c12/merged\" at \"/var/lib/docker/overlay2/44675a2cf4ac6e3052c9df3bd6fbb35b1ece33736d632199572c6a1c90965c12/merged/etc/nginx/conf.d/default.conf\" caused \"not a directory\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
我认为 docker 抱怨的是这一行:
- ./compose/production/nginx/myconf.conf:/etc/nginx/conf.d/default.conf
我正在尝试将我的配置从我的 nginx 文件映射到 nginx docker 容器的默认配置中。 myconf.conf 在那里,它是一个文件。
我的猜测是将文件从本地计算机加载到服务器上的容器时出现问题?但我不知道如何解决这个问题……此外,关于此错误的其他问题也无济于事。
我 运行 和 docker 机器指向实例的命令不应该做完全相同的事情,就像我通过 ssh 进入我的实例并 运行 它来自那里?不幸的是,我对 docker 的了解有限。如果有人能帮我一把,我将不胜感激。
非常感谢,请在下面查看我的配置:
production-nginx-container:
container_name: 'production-nginx-container'
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./compose/production/nginx/myconf.conf:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt/live/mydomain.de/fullchain.pem:/etc/letsencrypt/live/mydomain.de/fullchain.pem
- /etc/letsencrypt/live/mydomain.de/privkey.pem:/etc/letsencrypt/live/mydomain.de/privkey.pem
depends_on:
- django
即使您使用远程 $DOCKER_HOST
Docker 也无法将本地内容挂载到远程容器。 docker run -v
选项和 Docker Compose volumes:
绑定安装始终被视为 Docker 守护程序所在的主机上的路径 运行ning,而不是你 运行宁docker
命令。您需要将配置文件和 TLS 证书等内容复制到远程主机,在执行此操作时,您也可以使用 ssh 来启动容器。
您可能会考虑 Ansible、Chef 或 Salt Stack 等自动化工具是否满足您的需求。这些通常具有用于 "make sure this file is on the remote system" 和 "start this container on some remote system" 的内置工具。我不建议使用 Docker 机器,除非在特定情况下需要本地 VM 到 运行 Docker(通常通过 Docker 工具箱应用程序,在 Windows 7 或其他没有 "native" Docker 应用程序可以使用的环境)。