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

我试图在开发中的docker容器中运行fake_sqs gem以testing我的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 

这在一定程度上起作用。 我可以使用http://aws.docker:4568 url将消息发送到fakesqs 。 我试图解决的问题围绕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选项设置主机url(即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

Interesting Posts