使用network_mode =' host'在docker-compose中运行:主机类型网络不能与链接一起使用

时间:2017-05-10 22:22:06

标签: django docker docker-compose ubuntu-16.04

我将django应用程序停靠,它需要连接到HOST PostgresDB数据库。为此我在docker-compose中做了:

  version: '2'
  services:
    web:
      build:
        context: .
        dockerfile: DockerfileWeb
      command: gunicorn --timeout=300 --graceful-timeout=30 -w 2 --threads 2 -b 0.0.0.0:8000 cobros.wsgi
      volumes:
        - .:/code
        - /tmp:/tmp
      network_mode: "host"
      ports:
        - "8000:8000"
      restart: always
      environment:
        - DATABASE_URL=postgres://postgres@127.0.0.1/postgres
        - PRODUCTION="true"

这项工作很好,除非我尝试在docker中运行命令,例如:

docker-compose run web python manage.py periodico

现在我收到了这个错误:

  

[192.168.1.70] out:错误:无法为服务网站创建容器:   b"冲突选项:主机类型网络无法与链接一起使用。   这将导致未定义的行为"

2 个答案:

答案 0 :(得分:2)

这是因为docker-compose run运行另一个容器,一个新容器,它试图连接到与docker-compose up容器相同的网络,以便它们可以一起工作。

由于发布规则,这不会与host网络一起使用。

相反,您可以使用docker-compose exec web python manage.py periodico

答案 1 :(得分:0)

我知道这个问题的答案迟到了,但是 docker 仍然有同样的问题。对我来说,@RawKode 的问题是未定义的变量,例如 DATABASE_URL。你可以用

解决它

docker run -it --rm --net=host <image_name> <command> 添加 -e / --env-file 和变量名称。

该命令较长,但其工作方式与 docker-compose run 完全相同。