如何确定主机 ubuntu 机器 docker 中容器的 IP?

How to determine IP for containers in host ubuntu machine docker?

当我执行 echo $DOCKER_HOST 时,我得到空白数据。

我启动了 3 个容器 运行,包含以下组合文件:

db:
  image: mongo:latest
  volumes:
    - air_scout-mongodb:/data/db
app:
  build: .
  env_file: .env
  environment:
    RAILS_ENV: $RAILS_ENV
  links:
    - db
  expose:
    - "3000"
web:
  build: .
  dockerfile: config/containers/Dockerfile-nginx
  links:
    - app
  ports:
    - "80:80"  

下面是所有 3 个容器的 /etc/hosts 文件的内容,包括主机 ubuntu:

host /etc/hosts content
  127.0.0.1 localhost
  127.0.1.1 bajratech-codemilan-pc
  192.168.99.100  air_scout.docker
  # The following lines are desirable for IPv6 capable hosts
  ::1     ip6-localhost ip6-loopback
  fe00::0 ip6-localnet
  ff00::0 ip6-mcastprefix
  ff02::1 ip6-allnodes
  ff02::2 ip6-allrouters
web container nginx /etc/hosts contents. // container id = 04f4b2a137db
  127.0.0.1 localhost
  ::1 localhost ip6-localhost ip6-loopback
  fe00::0 ip6-localnet
  ff00::0 ip6-mcastprefix
  ff02::1 ip6-allnodes
  ff02::2 ip6-allrouters
  172.17.0.3  airscout_app_1 50a8bbe3d0f9
  172.17.0.3  app 50a8bbe3d0f9 airscout_app_1
  172.17.0.3  app_1 50a8bbe3d0f9 airscout_app_1
  172.17.0.4  04f4b2a137db
app container unicorn /etc/hosts contents. // container id = 50a8bbe3d0f9
  127.0.0.1 localhost
  ::1 localhost ip6-localhost ip6-loopback
  fe00::0 ip6-localnet
  ff00::0 ip6-mcastprefix
  ff02::1 ip6-allnodes
  ff02::2 ip6-allrouters
  172.17.0.2  airscout_db_1 4743428b65c4
  172.17.0.2  db 4743428b65c4 airscout_db_1
  172.17.0.2  db_1 4743428b65c4 airscout_db_1
  172.17.0.3  50a8bbe3d0f9
db container mongodb /etc/hosts contents.  // container id = 4743428b65c4
  127.0.0.1 localhost
  ::1 localhost ip6-localhost ip6-loopback
  fe00::0 ip6-localnet
  ff00::0 ip6-mcastprefix
  ff02::1 ip6-allnodes
  ff02::2 ip6-allrouters
  172.17.0.2  4743428b65c4  

我无法访问主机中的 web(nginx) 容器,如何找到它?

请检查您的 port 配置并确保它们正确绑定。还有一个不错的地方就是看运行 docker-compose up.

之后的日志

还要确保您的 .env 文件包含所有必需的环境变量,主要是 SECRET_KEY_BASE 用于 rails 应用。

要知道哪个 IP/port 是 运行 您的容器,您可以使用命令 docker ps

docker ps会显示哪些容器是运行,以及每个容器使用和导出的端口。 (见端口栏)

 $ docker ps
 CONTAINER ID        IMAGE                        COMMAND                CREATED              STATUS              PORTS               NAMES
4c01db0b339c        nginx                 bash                   17 seconds ago       Up 16 seconds       0.0.0.0:80->80/tcp, 443/tcp       nginx1

在这个例子中,容器的80端口映射到你机器的80端口。这意味着您可以通过您机器的 80 端口访问您的容器,例如使用 telnet 命令:

 telnet localhost 80