如何在 docker-compse 中获取容器的 IP 地址
How to get IP address of container in docker-compse
我正在尝试 运行 fake_sqs gem 在开发中的 docker 容器中测试我的 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 请求队列 urls 时,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
)设置主机 url。
如何访问 fakesqs
容器 IP 地址以放入命令中?我是否必须为该容器设置静态 IP 地址?还是我打算用另一种方式来做?
尝试使用主机名而不是 IP 地址。
从您的应用程序容器中将 link 添加到 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
我正在尝试 运行 fake_sqs gem 在开发中的 docker 容器中测试我的 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 请求队列 urls 时,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
)设置主机 url。
如何访问 fakesqs
容器 IP 地址以放入命令中?我是否必须为该容器设置静态 IP 地址?还是我打算用另一种方式来做?
尝试使用主机名而不是 IP 地址。
从您的应用程序容器中将 link 添加到 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