如何在docker-compse中获取容器的IP地址

时间:2016-07-18 07:25:44

标签: ruby docker rubygems docker-compose amazon-sqs

我正在尝试在开发中的docker容器中运行fake_sqs gem来测试我的SQS集成,并让另一个应用程序向它发送消息。

我的docker-compose文件如下所示:

app:
  build: .
  command: bundle exec rails s Puma --port 3000 --binding 0.0.0.0
  volumes:
    - ./:/app
  ports:
     - 3000:3000
  links:
    - db:db
  environment:
    VIRTUAL_HOST: app.docker
    PGHOST: db
    PGUSER: postgres
    AWS_REGION: us-west-2
    AWS_QUEUE_NAME: my-queue
    AWS_ENDPOINT: http://aws.docker:4568/
fakesqs:
  build: .
  command: fake_sqs -p 4568
  volumes:
    - ./:/app
  ports:
     - 4568:4568
  links:
    - db:db
  environment:
    VIRTUAL_HOST: aws.docker
    PGHOST: db
    PGUSER: postgres
    AWS_REGION: us-west-2
db:
  image: postgres

这在某种程度上有效。我可以使用fakesqs网址向http://aws.docker:4568发送消息。我试图解决的问题围绕fakesqs容器的命令。如果您在我的文件中写入fake_sqs,则默认情况下会将主机名设置为0.0.0.0。这意味着当我使用aws-sdk gem请求队列网址时,fake_sqs会回复错误的主机。

client = Aws::SQS::Client.new
client.get_queue_url(queue_name: 'my-queue').queue_url
# => http://0.0.0.0:4568/my-queue

我显然无法使用此网址发送消息。相反,url必须是fakesqs容器的IP。您可以使用-o选项设置主机网址(即fake_sqs -o <IP_ADDRESS> -p 4568)。

如何访问要放入命令的fakesqs容器IP地址?我是否必须为该容器设置静态IP地址?还是有其他方式我打算这样做?

1 个答案:

答案 0 :(得分:4)

尝试使用主机名而不是IP地址。

从您的应用容器中添加指向fake_sqs的链接

app:
  build: .
  command: bundle exec rails s Puma --port 3000 --binding 0.0.0.0
  volumes:
    - ./:/app
  ports:
     - 3000:3000
  links:
    - db:db
    - fake_sqs #add this line!
  environment:
    VIRTUAL_HOST: app.docker
    PGHOST: db
    PGUSER: postgres
    AWS_REGION: us-west-2
    AWS_QUEUE_NAME: my-queue

并尝试在您的应用容器中执行fake_sqs -o fake_sqs -p 4568