如何在docker compse网络中使用ipaddreses而不是容器名称

时间:2017-05-29 18:17:33

标签: docker docker-compose

我正在使用docker compose创建一个我使用asp.net core,postgres和redis创建的Web应用程序。我已经完成了使用docker-compose.yml文件中指定的服务名称连接到postgres的所有内容。当试图用redis做同样的事情时,我得到一个例外。经过研究后发现这个异常是一个已知问题,并且解决方法是使用机器的IP地址而不是主机名。但是我无法弄清楚如何从compose文件中获取redis服务的ipaddress。有没有办法做到这一点?

修改

这是撰写文件

version: "3"

services:
    postgres:
      image: 'postgres:9.5'
      env_file:
        - '.env'
      volumes:
        - 'postgres:/var/lib/postgresql/data'
      ports:
        - '5433:5432'
    redis:
      image: 'redis:3.0-alpine'
      command: redis-server --requirepass devpassword
      volumes:
        - 'redis:/var/lib/redis/data'
      ports:
        - '6378:6379'
    web:
        build: .
        env_file:
          - '.env'
        ports:
          - "8000:80"
        volumes:
          - './src/edb/Controllers:/app/Controllers'
          - './src/edb/Views:/app/Views'
          - './src/edb/wwwroot:/app/wwwroot'
          - './src/edb/Lib:/app/Lib'
volumes:
  postgres:
  redis:

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。这是我尝试过的,但没有意识到每次重新启动容器时地址都可能会改变。

运行docker ps以获取正在运行的contianers的列表,然后复制容器的id并运行docker inspect {container_id},这将输出您可以从其他正在运行的容器中访问它的ipaddress。 / p>

我感到困惑的原因是因为当容器启动时该地址可能会改变。所以我必须猜测在启动容器之前ip地址是什么。幸运的是,经过5次我猜对了。