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

标签 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请求队列URL时,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发送消息。相反,该URL必须是fakesqs容器的IP。您可以使用-o选项(即fake_sqs -o <IP_ADDRESS> -p 4568)设置主机网址。

如何访问fakesqs容器IP地址以放入命令中?我必须为该容器设置一个静态IP地址吗?还是有另一种我打算做的方式?

最佳答案

尝试使用主机名而不是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

关于ruby - 如何在docker-compose中获取容器的IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38430826/

相关文章:

ruby-on-rails - ruby 在与 webapp 不同的进程中运行代码

docker - GO - Docker 在 K8S 容器上询问证书

mysql - 如何在 Kubernetes 中传递 .sql 文件?

ruby - 解决多个版本的rubygems

ruby - 如何修复 Rubygems 最近的弃用警告?

ruby-on-rails - 使用 rails 来使用 web 服务/api

ruby-on-rails - Ruby strftime '%Z' 方法返回 '0545' 而不是 'NPT'

ruby-on-rails - .rewind 方法对 ruby​​ 中的 Tempfile 做了什么?

java - 将 Java 添加到 Boot2Docker Linux VM?

ruby-on-rails - 创建一个gem服务器,我可以将gem发布到