add-host中的IP地址无效:“”+编程FILTER链失败:iptables失败

时间:2017-07-11 11:46:42

标签: docker docker-compose host

我正在处理由另一个人打包在Docker容器中的科学代码。我不太熟悉容器,图像等背后的所有魔法。如果我需要在代码中添加一些依赖项,我只是通过运行一些简单的命令来使用它,如docker-compose updocker-compose up --build。登记/> 所以一切都很正常,直到昨晚。我正在运行一个整夜的模拟,但是我看到结果不合适,所以我只是按ctrl + C 2或3次来杀死处理过的。当我试图通过docker-compose up再次启动模拟时,我收到了一个错误,不幸的是,我现在无法回想起来。此外,奇怪的是 - 那一刻我无法连接到互联网。我重新启动,互联网工作正常,我试图再次运行docker-compose up,我得到以下输出:

WARNING: The DOCKERHOST variable is not set. Defaulting to a blank string.
Creating alcor_alcor_1 ... 
alcor_cassandra_1 is up-to-date
Creating alcor_alcor_1 ... error

ERROR: for alcor_alcor_1  Cannot create container for service alcor: invalid IP address in add-host: ""

ERROR: for alcor  Cannot create container for service alcor: invalid IP address in add-host: ""
ERROR: Encountered errors while bringing up the project.

我通过运行删除了所有图像,容器和卷:
docker rm $(docker ps -a -f status=exited -q)
docker rmi $(docker images -a -q)
docker volume rm $(docker volume ls -f dangling=true -q)

然后我通过运行docker-compose build --no-cache来重建所有内容 没有错误被抛出。我再次运行docker-compose up并仍然遇到同样的错误:invalid IP address in add-host: "" 然后我再次重复我的步骤:删除所有图像,容器和卷,重建所有内容并尝试再次运行。现在每次它都告诉我这个:

WARNING: The DOCKERHOST variable is not set. Defaulting to a blank string.
Creating network "alcor_default" with the default driver
ERROR: Failed to program FILTER chain: iptables failed: iptables -I FORWARD -o br-231cf5f5b939 -j DOCKER: iptables v1.4.14: Couldn't load target `DOCKER':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
  (exit status 2)

这可能是什么原因,我该如何解决?我可以提供任何其他信息来帮助理解这一点吗?谷歌和Docker文档在这件事上没有说什么。而且我没有找到关于它的任何信息。任何帮助表示赞赏。

这可能有助于理解这个问题:

$ docker version
Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:27:03 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:22:34 2017
 OS/Arch:      linux/amd64
 Experimental: false

搬运工-compose.yml

version: '3'

services:
  alcor:
    build: .
    image: lycantropos/alcor:latest
    entrypoint: "/alcor/docker-entrypoint.sh"
    volumes:
      - .:/alcor/
    extra_hosts:
      - "dockerhost:$DOCKERHOST"  # for debugging
    command:
      # Here I omitted many options and arguments
      - simulate
    environment:
      - CASSANDRA_RPC_ADDRESS=cassandra
      - CASSANDRA_RPC_PORT=9042

  cassandra:
    image: cassandra:latest
    volumes:
      - cassandra-data:/var/lib/cassandra

volumes:
  cassandra-data:

修改:我再试一次。我清理了所有内容,重新启动并重建,并返回第一个错误。

3 个答案:

答案 0 :(得分:2)

首先,在 docker-compose.yml 中,我不得不更改行

- "dockerhost:$DOCKERHOST"  # for debugging

- "dockerhost:172.17.0.1"

其中 172.17.0.1 称为bridge network gateway

它没有完全解决第二个错误的问题。但是有助于运行以下命令:

sudo ufw disable
sudo systemctl restart docker

第一个禁用防火墙。

看起来这是Ubuntu特有的一个问题,因为我从来没有在Linux Mint上遇到过这个问题,在Debian Wheezy上它很少发生。

答案 1 :(得分:0)

您可以在禁用防火墙之前尝试以下步骤:

export DOCKERHOST=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1)

docker-compose down --remove-orphans

docker-compose build

docker-compose up

答案 2 :(得分:0)

我做的有点类似于@noreddine-belhadj-cheikh,但有一些稍微不同的命令,这些命令可能也适用于 Debian 和其他发行版。我还有一个执行以下操作的启动脚本 (up.sh):

export DOCKERHOST=$(ip addr show | grep "\binet\b.*\bdocker0\b" | awk '{print $2}' | cut -d '/' -f 1)
docker-compose up