我是 Docker 的新手,虽然我了解容器和 VM 之间的区别,但我不确定是否可以将主机的 IP 地址(192.168.xx,而不是 127.0.0.1)分配给 docker在其中运行的容器。
我找到了一个很好的答案,解释了如何从容器内连接到主机。但它并没有说明主机和容器是否可能具有相同的IP 地址。
另外,这个关于 Docker in a Windows environment 的问题。
我是 Docker 的新手,虽然我了解容器和 VM 之间的区别,但我不确定是否可以将主机的 IP 地址(192.168.xx,而不是 127.0.0.1)分配给 docker在其中运行的容器。
我找到了一个很好的答案,解释了如何从容器内连接到主机。但它并没有说明主机和容器是否可能具有相同的IP 地址。
另外,这个关于 Docker in a Windows environment 的问题。
我有一个非常具体的 Docker/Windows 问题,有非常具体的限制。我希望我能找到一个确凿的答案(“不,它不能完成”,或者“可以通过这些可重复的步骤来完成”。)
我需要在 Windows 上安装 Docker 的社区版(不是许可的 Docker Desktop,而是“原始”CLI)。
这可以使用随附的 DockerCli.exe 程序在(许可的)Docker Desktop 中完成。例如:
PS> .\DockerCli.exe -SwitchLinuxEngine
需要从使用 Windows 容器切换到使用 Linux 容器(以便让 dockerd pull 并运行一些基于 Alpine 的自定义/旧版映像。)如果没有这个,Windows 上的 Docker 将抱怨如下:
2020-09-18T03:30:24.0943834Z image operating system "linux" cannot be used on this platform
使用 Docker Desktop,这没有问题(只需使用 DockerCli.exe 获取守护程序来切换容器策略。)
但是现在 Docker Desktop 需要许可证,这不是一个选项(或者不是首选选项。)
不幸的是,我找不到仅使用普通 docker 切换容器策略的方法(通过直接发布或通过诸如 Scoop 之类的工具安装。)
所以,我非常具体的问题是:
这可以在 Windows 上使用简单的 docker 二进制文件完成,而不依赖 Docker Desktop、WSL2 等吗?也许通过使用 PowerShell 来调整系统,或者使用其他一些未经许可的开源 CLI 来实现这一点?
我正在寻找是/否的答案(如果是,希望有可重复的说明。)
如果无法完成,只要我能记录下来,我就可以接受。
请注意我提出这个问题的严格背景/约束。
谢谢,周末愉快。
PS。
我不想争论 WSL2 是否好,或者我为什么不考虑将它作为一个选项。WSL2 没有任何问题,但是存在一些操作限制,使 WSL2 对于非常具体的业务案例不太理想(我不打算在这里讨论)。
谢谢。
我已经在 Windows 10 上安装了 Docker Desktop 和 Ubuntu 20.04 [Microsoft Store],并看到我有三个发行版 [如下],但我想摆脱docker-desktop
and docker-desktop-data
,因为我不需要那么多并且想要使用Ubuntu-20.04
仅用于我的 Docker 实验:
PS $ wsl -l -v
NAME STATE VERSION
Ubuntu-20.04 Running 2
docker-desktop-data Running 2
docker-desktop Running 2
docker-desktop-data
包含图像并docker-desktop
包含 Docker 基础架构,但我仍然不清楚并且感到困惑我如何删除这些,我需要它们吗?
在计算机重新启动和 Java 运行时环境更新后,Docker Desktop 挂起,托盘图标文本“Docker 正在启动”。
在 PowerShell 中使用 Docker 时,它说:
Sending build context to Docker daemon 3.072kB
Error response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file specified.
右键单击托盘图标打开菜单,没有机会单击任何内容,并且菜单不再消失。Docker Desktop 不显示本地图像或容器。
该怎么办?
我从 Windows 上的 Docker 开始。简单的例子工作正常。但现在我想安装需要在 Docker 桌面上安装 WSL2 的 Laravvel 8 容器。根据微软文档。它需要加入 Insiders Program 并安装 OS build 20262 或更高版本(我有 18363)。在内部人员注册时,有一个重要通知,上面写着:
本程序中提供给您的实验性和早期预发布软件和服务可能未经测试。您可能会遇到崩溃、安全漏洞、数据丢失或设备损坏。...
这是什么意思?我不想要这种麻烦的保证。是否可以在没有 WSL2 的情况下运行 docker?我不明白。另一位用户说 Win 上的 WSL2 有问题。听起来不太好。如果我想从 Docker 开始,我该怎么办?
非常感谢您的帮助。
我从 Docker 开始。因此,据我所知,该图像是带有 dockerfile 的目录,其中包含用于制作 docker 容器的 docker 指令...
但是,如果我尝试通过例如从 Docker 集线器运行外部映像,docker run wordpress:php7.4
我无法使用 dockerfile 找到目标文件夹。我找到了 C:/users/public/public documents/Hyper V/Virtual hard disks/ 之类的答案,但他的文件夹是空的。没有文件夹也没有 dockerfile。所以问题很简单:在哪里可以找到下载图像的 dockerfile?非常感谢。
Docker 桌面安装在 Windows Home 上。我收到错误通知“您必须在 docker-users 组中。”
所以你可以去 compmgmt.msc 将自己添加到组中,但是 Windows Home 没有像 Windows Pro 那样的用户组管理。
如何为 Windows Home 执行此操作?
我已经在 Windows 10 中设置了最新的 Docker Desktop 2.1.0.5 并创建和运行简单/琐碎的容器,即docker run --rm -v c:/Users:/data alpine ls /data
工作正常。
但是,我遇到了麻烦(1)创建一个与 Windows 主机上的文件夹绑定的卷并要求 Linux 容器使用它;(2) 为该容器指定一个 DockerFile。这是我尝试过的:
docker volume create --driver local --opt type=none --opt device=c:\path\to\folder --opt o=bind test_vol
,并尝试像这样安装它docker run --rm -v test_vol:/data alpine ls /data
:这给了我错误:C:\Program Files\Docker\Docker\Resources\bin\docker.exe:来自守护进程的错误响应:挂载卷'/var/lib/docker/volumes/test_vol/_data'时出错:挂载本地卷失败:挂载c :\path\to\folder:/var/lib/docker/volumes/test_vol/_data,标志:0x1000:没有这样的文件或目录。
但是,如果我在命令中指定该主机文件夹docker run
而不通过先前创建的卷(如:)docker run --rm -v c:\path\to\folder:/data alpine ls /data
,那么它可以正常工作。
docker run --rm --env-file c:\path\to\DockerFile -v c:\path\to\folder:/data alpine ls /data
,我得到这个错误:C:\Program Files\Docker\Docker\Resources\bin\docker.exe: 读取 c:\path\to\DockerFile: 句柄无效。请参阅“C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help”。
/
vs \
) 的方向并将路径放在引号中,但这些都没有帮助或改变错误输出。我对如何在 Docker for Windows 中指定这些路径感到非常困惑。有人可以建议如何解决这个问题吗?谢谢你。
考虑我的文件中的以下 YAML 代码,它使用文档中指定的短格式语法docker-compose.yml
设置卷安装(使用版本 3.7) :
volumes:
- ./logging:/var/log/cron
logging
这会将我的主机上的相对路径映射到/var/log/cron
容器内的文件夹。当我运行时docker-compose up
,如果logging
我的主机上不存在该文件夹,Docker 会创建它。那里一切都好。
现在,如果我将上面的内容更改为长格式语法:
volumes:
- type: bind
source: ./logging
target: /var/log/cron
现在,当我运行时,如果它在我的主机上不存在docker-compose up
,它不会创建文件夹。logging
我明白了
Cannot create container for service app: b'Mount denied:\nThe source path "C:/Users/riptusk331/logging"\ndoesn\'t exist and is not known to Docker'
有谁知道为什么短格式语法不存在会创建主机路径,但长格式不存在并给出错误?
使用适用于 Windows 的 Docker 桌面。