我在理解Docker for Windows以及网络如何工作方面遇到了一些麻烦.在带有桥接适配器和Ubuntu虚拟机的VirtualBox中,一切正常 - 我可以从我的主机(反之亦然)ping vm.
是有多个Windows机器(不是vms),每个运行一个Docker容器(形成一个存储集群),这些容器需要相互通信(overlay
可能使用网络运行,或者这需要swarm
?).我还需要在外部进行讨论,这是我能够工作的唯一部分,使用docker run -p
选项公开我需要的容器中的端口.
为了详细说明我的过程,我的目标是构建一个在Linux上运行的Amazon S3风格的键值存储(特别是使用Riak KV).由于这需要运行该软件的多台计算机,在我看来,Docker可以带来诸多好处,包括易于设置和部署,以及在Windows上运行基于Linux的软件的框架,这是我目前很容易访问的.
如果我使用默认的网桥在同一主机上运行两个Ubuntu容器,它们可以相互ping通.ifconfig
列出具有172.17 ... ip地址的local和eth0适配器.从这一点来看,它听起来不像我正在寻找的桥,因为我想要多个主机.
如果我运行Ubuntu容器,--network host
我可以从ifconfig
"br-xxxxxxxx"和"vethxxxxxx"适配器获得更多输出.从文档中,
在主机网络堆栈上添加容器
这听起来很有用,但也许我不理解.我知道Docker for Windows运行MobyLinuxVM,并使用Hyper-V适配器和交换机,主机指的是什么?windows pc还是这个VM?有了--network host
,我仍然无法ping容器或从容器ping我的桌面.
似乎Docker的常见用法不是基于Windows的,所以我找不到太多引用.我的用例与Docker的正常使用有很大不同吗?任何人都能指出我在这里缺少的东西吗?
阅读Hyper-V适配器使我看起来除了启动容器之外还需要更改网络适配器设置?我想,我很难理解在windows,hyper-v adapter/switch,ubuntu和docker之间的位置.
我已经浏览了所有可以在线找到的用于构建基于docker容器的应用程序的示例.我想运行在两个docker容器中运行的两个服务:
简单的工作和许多例子.但是,在所有示例中,您需要使用SQL身份验证,并在运行SQL Server容器时提供硬编码的SA密码作为环境变量.您还需要将SA密码硬编码到ASP.Net代码中的连接字符串中(或者在配置文件中以其他方式提供它等)
在所有示例的底线中,密码在某处都是硬编码的.
在我们现在开发的大多数应用程序中,我们实际上使用Windows身份验证或使用分组的托管服务帐户.但据我所知,你不能将Windows容器添加到域,因此SQL服务器不是Windows域的一部分,所以我没有看到在这里使用Windows身份验证的方法.
那么任何人都可以用这种方式替代硬编码密码吗?
我有一个 docker-compose.yml 文件,我在其中定义了 php 的图像和构建。它是为带有 php、nginx 和 postgresql 和 postgis 的 Symfony 应用程序制作的:
version: '2'
services:
front:
image: nginx
ports:
- "81:80"
links:
- "engine:engine"
- "db:db"
volumes:
- ".:/home/docker:ro"
- "./docker/front/default.conf:/etc/nginx/conf.d/default.conf:ro"
engine:
build: ./docker/engine/
volumes:
- ".:/home/docker:rw"
- "./docker/engine/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro"
links:
- "db:db"
working_dir: "/home/docker"
db:
image: camptocamp/postgres:9.6
ports:
- "5433:5432"
environment:
- "POSTGRES_DB=pfe"
- "POSTGRES_PASSWORD=admin"
- "POSTGRES_USER=admin"
- "PGDATA=/var/lib/postgresql/data/pgdata"
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 上一切正常,但是当我尝试在 Windows 10 上运行相同的环境时,出现错误。
docker-compose exec engine bin/console doctrine:schema:create
/usr/bin/env: 'php\r': No such file or directory
Run Code Online (Sandbox Code Playgroud) 我可以在执行命令时寻求帮助吗 docker-compose up -d
我收到错误你能帮我如何使用 nginx 执行 php
Removing nginx-container
mysql-container is up-to-date
php-container is up-to-date
Recreating 2e6f7b9915c6_nginx-container ... error
ERROR: for 2e6f7b9915c6_nginx-container Cannot start service web: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/host_mnt/c/webdock/firstweb/default.conf\\\" to rootfs \\\"/var/lib/docker/overlay2/8261a085184069473ca52f3ad508386e84f0636baafbbc754e1447ea72427433/merged\\\" at \\\"/var/lib/docker/overlay2/8261a085184069473ca52f3ad508386e84f0636baafbbc754e1447ea72427433/merged/etc/nginx/conf.d\\\" 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
ERROR: for web …
Run Code Online (Sandbox Code Playgroud) 我已经为 Windows 安装了 Docker 作为一个完整的菜鸟,希望尝试一下。我确保 Hyper-V 已启用,虚拟化也已启用
任何时候我尝试运行 docker 桌面时,鲸鱼图标都是红色的,它表明它无法启动,如果我尝试从 cmd 运行命令,我会收到以下错误
连接时出错:获取 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/images/json: open //./pipe/docker_engine: 系统找不到指定的文件。在 Windows 上的默认守护程序配置中,必须提升 docker 客户端运行以进行连接。此错误也可能表示 docker 守护程序未运行。
我不知道如何解决问题。
我还注意到,即使我通过添加/删除程序完全卸载 Docker,我列出 WSL 设备时的状态始终设置为“正在安装”
windows docker windows-subsystem-for-linux docker-for-windows
我正在使用Jackson,CDI,Swagger和Drools在WildFly上运行Java EE 7应用程序(包含很多类).我认为这个错误起源于我开始使用Drools,但我不确定.由于没有引用本地类,我不知道错误源自何处.
AFAIK,应用程序没有问题,但是当我部署应用程序时,我收到以下错误:
ERROR java.io.IOException: Mount point not found
ERROR at sun.nio.fs.LinuxFileStore.findMountEntry(LinuxFileStore.java:91)
ERROR at sun.nio.fs.UnixFileStore.<init>(UnixFileStore.java:65)
ERROR at sun.nio.fs.LinuxFileStore.<init>(LinuxFileStore.java:44)
ERROR at sun.nio.fs.LinuxFileSystemProvider.getFileStore(LinuxFileSystemProvider.java:51)
ERROR at sun.nio.fs.LinuxFileSystemProvider.getFileStore(LinuxFileSystemProvider.java:39)
ERROR at sun.nio.fs.UnixFileSystemProvider.getFileStore(UnixFileSystemProvider.java:368)
ERROR at java.nio.file.Files.getFileStore(Files.java:1461)
ERROR at org.jboss.as.controller.persistence.FilePersistenceUtils.getPosixAttributes(FilePersistenceUtils.java:124)
ERROR at org.jboss.as.controller.persistence.FilePersistenceUtils.createTempFileWithAttributes(FilePersistenceUtils.java:112)
ERROR at org.jboss.as.controller.persistence.FilePersistenceUtils.writeToTempFile(FilePersistenceUtils.java:99)
ERROR at org.jboss.as.controller.persistence.ConfigurationFilePersistenceResource.doCommit(ConfigurationFilePersistenceResource.java:55)
ERROR at org.jboss.as.controller.persistence.AbstractFilePersistenceResource.commit(AbstractFilePersistenceResource.java:58)
ERROR at org.jboss.as.controller.ModelControllerImpl$4.commit(ModelControllerImpl.java:789)
ERROR at org.jboss.as.controller.AbstractOperationContext.executeDoneStage(AbstractOperationContext.java:743)
ERROR at org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:680)
ERROR at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:370)
ERROR at org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1329)
ERROR at org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:400)
ERROR at org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:222)
ERROR at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.doExecute(ModelControllerClientOperationHandler.java:208)
ERROR at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.access$300(ModelControllerClientOperationHandler.java:130)
ERROR at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1$1.run(ModelControllerClientOperationHandler.java:152)
ERROR at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1$1.run(ModelControllerClientOperationHandler.java:148)
ERROR …
Run Code Online (Sandbox Code Playgroud) 尝试在 Windows 10 专业版上启动 docker 时,我继续收到以下错误。我的 HyperV 已打开并正在运行:版本 18.04.0-ce-win62 (17151) 通道:edge e0a85f6
任何帮助,将不胜感激!
无法创建:正在运行的命令停止,因为首选项变量“ErrorActionPreference”或公共参数设置为“停止”:Hyper-V 在尝试访问计算机“C001715587”上的对象时遇到错误,因为找不到对象。对象可能已被删除。验证计算机上的虚拟机管理服务是否正在运行。在 New-Switch, : line 117 at , : line 394 at Docker.Core.Pipe.NamedPipeClient.Send(String action, Object[] parameters) in C:\gopath\src\github.com\docker\pinata\win\ src\Docker.Core\pipe\NamedPipeClient.cs:line 36 at Docker.Actions.DoStart(SynchronizationContext syncCtx, Boolean showWelcomeWindow, Boolean executeAfterStartCleanup) in C:\gopath\src\github.com\docker\pinata\win\src\ Docker.Windows\Actions.cs:第 75 行,位于 Docker.Actions.<>c__DisplayClass15_0。
TL; DR
从VM上运行的docker容器我可以ping所有主机IP(例如10.10.10.1和172.24.185.209),但我无法ping 10.0.75.1.我的猜测是,一旦我弄清楚为什么我无法访问10.0.75.1网络适配器,共享问题将得到解决.
我已经阅读了这篇描述相同问题的帖子并尝试了各种建议而没有成功.我尝试过以下方法:
我使用以下内容:
更新时间:9/27/2018
我试图连接到虚拟机并四处寻找,但它不能 - 它一直说"视频远程连接断开".但是按照这个https://docker-saigon.github.io/post/Docker-Beta/#private-registries:ebf9573d6838c40027746e9d7482622a我在VM上运行了一个容器并通过它访问了VM.我正在使用以下内容运行容器,因此我可以完全访问来宾网络(--net = host)
docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
Run Code Online (Sandbox Code Playgroud)
我在主机上有以下适配器:
PS C:\WINDOWS\system32> ipconfig /all
Windows IP Configuration
Host Name . . . . . . . . . . …
Run Code Online (Sandbox Code Playgroud) 我对 docker 很陌生。我正在尝试 dockerize 一个 helloworld API。但是当我尝试 docker run 图像时,我收到了这个错误:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: container f891d7fc7af6e1183256043e6105fc87e25c6959d9745cc972b42c7b2e6f5a06 在创建系统调用过程中遇到错误:Windows无法找到指定的文件系统:(0x2) [事件详细信息:提供者:00000000-0000-0000-0000-000000000000] [事件详细信息:提供者:00000000-0000-0000-0000-0000000000000-0000-0000-0000-000000000000] .cpp(168)\vmcomputeagent.exe!00007FF683797B25: (caller: 00007FF68377A312) Exception(4) tid(108) 80070002 系统找不到指定的文件。CallContext:[\Bridge_ProcessMessage\ComputeSystemManager_ExecuteProcess\VmHostedContainer_ExecuteProcess] Provider: 00000000-0000-0000-0000-000000000000] 额外信息: {"CommandLine":"
我有一个简单的asp.net api。我把它发布到同一个文件夹./publish
这是我的 docker 文件
FROM microsoft/aspnet:4.7.1-windowsservercore-1709
WORKDIR /app
COPY ./publish .
WORKDIR bin
RUN ls
ENTRYPOINT ["dotnet", "HelloWorldDocker.dll"]
Run Code Online (Sandbox Code Playgroud)
ls
显示HelloWorldDocker.dll
是在目录中./bin (app/bin)
。IDK这里有什么问题...
从2.3.0.2版本开始,docker桌面可以安装在Windows 10家庭版上,因为它可以使用Windows功能WSL2而不是Hyper-V。Windows 10 家庭版未安装 Hyper-V。
我仅限于 Windows 10 家庭版,并且我正在从事的项目无法使用 WSL2 作为 docker-for-windows 后端;仅适用于 Hyper-V。我使用下面的批处理脚本在 Windows 10 Home 上安装了 Hyper-V,但无法在 docker 中从 WSL 切换到 Hyper-V。
该选项呈灰色。
如何在 Windows 10 家庭版上强制 docker 使用 Hyper-V 而不是 WSL2?
在 Windows Home 上安装 Hyper-V 的批处理脚本:
pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
Run Code Online (Sandbox Code Playgroud) docker ×10
windows ×3
hyper-v ×2
networking ×2
php ×2
asp.net ×1
dockerfile ×1
firewall ×1
nginx-config ×1
sql-server ×1