Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker In Docker In Docker Compose(网络问题)_Docker_Docker Compose_Dockerfile - Fatal编程技术网

Docker In Docker In Docker Compose(网络问题)

Docker In Docker In Docker Compose(网络问题),docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我真的无法向你们解释,想要创建一个运行docker的docker容器有多难,docker将运行我的web服务器,可以访问我的外部docker主机 到目前为止,我所知道的是: 我有一个docker文件,当在docker外部执行时 用编写和测试我可以看到它连接到我的主机docker 守护进程 接下来我进入我的docker compose设置,我知道我必须 由于内部的网络连接而出现问题 docker编写文件。但我有0个docker 经验,所以我问如何将容器也连接到 是否在此设置中设置默认网络 我的

我真的无法向你们解释,想要创建一个运行docker的docker容器有多难,docker将运行我的web服务器,可以访问我的外部docker主机

到目前为止,我所知道的是:

  • 我有一个docker文件,当在docker外部执行时 用编写和测试我可以看到它连接到我的主机docker 守护进程
  • 接下来我进入我的docker compose设置,我知道我必须 由于内部的网络连接而出现问题 docker编写文件。但我有0个docker 经验,所以我问如何将容器也连接到 是否在此设置中设置默认网络
我的Bash脚本(入口点):

#/垃圾箱/垃圾箱
set-e
#第一个参数是`-f`或`--some选项`
如果[“${1#-}”!=“$1”];然后
set--docker“$@”
fi
#如果我们的命令是有效的Docker子命令,那么让我们通过Docker调用它
#(这允许“docker运行docker ps”等)
如果docker帮助“$1”>/dev/null 2>&1;然后
set--docker“$@”
fi
#如果我们有“--链接某个docker:docker”而不是docker\u主机,那么让我们自动设置docker\u主机
如果[-z“$DOCKER_主机”-a“$DOCKER_端口\u 2375\u TCP”];然后
导出DOCKER\u主机tcp://docker:2375'
fi
如果[“$1”=“dockerd”];然后

cat>&2您的
Dockerfile
公开端口80,但您没有在
docker compose.yml
文件中映射它

尝试将
docker compose yml
文件更新为以下内容:

docker compose yml

    ports:
      - <hostport>:<containerport>
ports键将把端口从主机映射到容器。简化语法:

version: '3.4'

services:
  apiserver:
    image: ${DOCKER_REGISTRY-}apiserver
    build:
      context: ./
      dockerfile: ./ApiServer/Dockerfile
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    ports:
      - 8080:80
    network_mode: "host"

这样做的效果是,当您从容器内部解析
localhost
127.0.0.1
时,您将实际获得主机。但是,如果您将容器部署到swarm,这将不起作用。

因此,我的问题是,我的容器apiservice需要能够连接到主机操作系统,而不是通过映射,而是位于同一网络上。这是因为我的应用程序最终会有一个数据库,所以它现在就在一个compose中。我的apiservice需要连接到新的网桥网络和原始主机级默认网桥网络。如果您遇到特定错误,请将其包括在内。我不知道这是个问题:/n如果我在docker compose之外运行容器,我会得到我想要的。如果我使用docker compose运行容器,它就永远不会连接到我的主机守护进程。在没有docker compose的情况下运行容器时,您使用了什么命令?您解决了这个问题吗?有什么我能帮忙的吗?信息/解决方案是否有用?
version: '3.4'

services:
  apiserver:
    image: ${DOCKER_REGISTRY-}apiserver
    build:
      context: ./
      dockerfile: ./ApiServer/Dockerfile
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    ports:
      - 8080:80
    network_mode: "host"