我有一個 docker-compose 檔案,其中包含我的容器以及 rabbitmq 的詳細資訊。這是我的 docker-compose.yml 檔案的精簡版本,我使用container_name和links關鍵字從容器內部訪問 rabbitmq 的 IP 地址。
version: "3.2"
environment:
&my-env
My_TEST_VAR1: 'test_1'
My_TEST_VAR2: 'test_2'
rabbitmq:
container_name: rabbitmq
image: 'rabbitmq:3.6-management-alpine'
ports:
- '5672:5672'
- '15672:15672'
environment:
AMQP_URL: 'amqp://rabbitmq?connection_attempts=5&retry_delay=5'
RABBITMQ_DEFAULT_USER: "guest"
RABBITMQ_DEFAULT_PASS: "guest"
my-service:
tty: true
image: my_image_name:latest
working_dir: /opt/services/my_service/
command: python3.8 my_script.py
ports:
- 9000:9000
links:
- rabbitmq:rabbitmq.server
environment:
<<: *my-env
在我的容器中,我可以通過以下方式成功 ping rabbitmq 服務器:
ping rabbitmq.server
有沒有辦法可以使用此鏈接訪問 rabbitmq 默認用戶名和密碼?還是我必須將它們作為單獨的環境變數傳遞?(如果可能的話,我想避免這種重復)
uj5u.com熱心網友回復:
您應該使用環境變數傳遞它們。此時的 Docker 鏈接是一個過時的功能,我建議直接洗掉links:您在docker-compose.yml檔案中留下的任何內容。Compose為您設定網路,以便 Compose 服務名稱rabbitmq和my-server可以用作容器之間的主機名,而無需任何特殊設定;鏈接提供的環境變數令人困惑,可能會無意中泄漏資料。
如果您想避免重復,可以使用已有的 YAML 錨語法,或者將環境變數寫入單獨的env_file:. 除非您有很多設定或很多容器,否則將它們寫入docker-compose.yml檔案是最簡單的。
version: '3.8'
services:
rabbitmq:
image: 'rabbitmq:3.6-management-alpine'
ports:
- '5672:5672'
- '15672:15672'
environment:
RABBITMQ_DEFAULT_USER: "guest"
RABBITMQ_DEFAULT_PASS: "guest"
# You may want volumes: to persist the queue.
# As a special case for RabbitMQ only, you would need a hostname:.
my-service:
image: my_image_name:latest
ports:
- 9000:9000
environment:
# I'd just write these out.
My_TEST_VAR1: 'test_1'
My_TEST_VAR2: 'test_2'
RABBITMQ_HOST: rabbitmq
RABBITMQ_USER: guest
RABBITMQ_PASSWORD: guest
# working_dir: and command: should be in your Dockerfile as
# WORKDIR and CMD respectively. links: is obsolete.
原則上,您可以將錨附加到任何 YAML 節點,但如果我正在閱讀它,我會發現語法有點混亂。我傾向于避免使用這樣的語法,但它在技術上是一種選擇。
services:
rabbitmq:
environment:
RABBITMQ_DEFAULT_USER: &rabbitmq_user guest
my-app:
environment:
RABBITMQ_USER: *rabbitmq_user
最后,我最初暗示過時的 Docker 鏈接功能確實會重新發布環境變數。我不會利用這一點——它在很多方面都是資訊泄漏,與應用程式自己的環境變數存在潛在沖突,并且鏈接功能通常被認為是過時的——但理論上可以使用它
services:
rabbitmq:
environment:
RABBITMQ_DEFAULT_USER: guest
my-app:
links: [rabbitmq]
docker-compose run my-app sh -c 'echo $RABBITMQ_DEFAULT_USER'
了解 RabbitMQ 影像設定變數取決于您的應用程式設定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/431612.html
