docker-compose network_mode:" host"似乎不起作用

时间:2016-07-29 16:50:16

标签: docker docker-compose

我尝试使用docker-compose.yml文件构建容器:

version: '2'

services:
     geonode:
        build: 
            context: .
        hostname: geonode
        container_name: geonode
        ports:
            - 8000:8000
        volumes:
            - .:/geonode/
        entrypoint:
            - /usr/bin/python
        command: manage.py runserver 0.0.0.0:8000
        network_mode: host

在我的Dockerfile中,我在apt-get update之后运行FROM ubuntu:14.04,但它失败了:Could not resolve 'archive.ubuntu.com'

我尝试了docker run -i -t --net=host ubuntu:14.04 /bin/bash,然后运行apt-get update并且它有效。 所以在我看来,docker-compose中的network_mode和带有docker run的--net=host不会以相同的方式工作。

有人有解释吗?

3 个答案:

答案 0 :(得分:0)

我不确定为什么会产生影响,但请尝试使用文档中显示的引号:

<!DOCTYPE html> <html> <head> <title>expExp.html</title> <meta http-equiv='Content-Type' content='text/html;charset=utf-8'/> <script> var canvas;var ctx; function fnOL() { canvas = document.getElementById("canvas"); ctx = canvas.getContext("2d"); fnOR(); } function drawClock() { var radius; radius = canvas.height / 2; ctx.translate(radius, radius); radius = radius * 0.9; drawCircle(ctx, radius); } function drawCircle(ctx, radius) { var ang; var num; for (num = 1; num <= 40; num++) { ang = num * Math.PI / 20; ctx.rotate(ang); ctx.translate(0, -radius * 0.85); ctx.rotate(-ang); ctx.beginPath(); ctx.arc(0, 0, radius / 20, 0, 2 * Math.PI); ctx.stroke(); ctx.rotate(ang); ctx.translate(0, radius * 0.85); ctx.rotate(-ang); } } function fnOR() { canvas.width = window.innerWidth; /// equal to window dimension canvas.height = window.innerHeight; drawClock(); } </script> </head> <body onload='fnOL();' onresize="fnOR();"> <canvas id='canvas'>No Canvas</canvas><br/> </body> </html>

如果它不识别该属性,它将回退到默认值,通常是&#34; bridge&#34;。您还可以network_mode: "host"验证网络类型。

答案 1 :(得分:0)

使用docker build命令定义网络不是一个选项,仅在运行容器时使用,而docker-compose只是docker引擎顶部的前端。因此,如果您无法通过主机上的桥接网络连接到互联网,我怀疑您无法在那里构建图像。

因此,首先让桥接网络工作,然后尝试构建您的图像。如果绝对无法使桥接网络工作,您可以通过在容器内手动运行命令来创建容器,然后将该容器提交到图像,但我不建议这样做,因为它不是很可重复或者可维护性。

答案 2 :(得分:0)

这样做时,它至少在3.7版中有效:

services:
    my-app:
        container_name: my-app
        build: 
            context: .
            network: host
        network_mode: host
        command: /app/my-app

由于所有端口都“暴露”,所以端口已过时。