【发布时间】:2023-03-07 22:47:01
【问题描述】:
我有一个包含三个服务(Solr、PostgreSQL 和 pgAdmin)的 docker-compose 文件,它们都共享一个 Docker 网络。
version: '2'
services:
solr:
image: solr:7.7.2
ports:
- '8983:8983'
networks:
primus-dev:
ipv4_address: 10.105.1.101
volumes:
- data:/opt/solr/server/solr/mycores
entrypoint:
- docker-entrypoint.sh
- solr-precreate
- primus
- /opt/solr/server/solr/configsets/sample_techproducts_configs
environment:
- SOLR_HEAP=2048m
logging:
options:
max-size: 5m
db:
image: "postgres:11.5"
container_name: "primus_postgres"
ports:
- "5432:5432"
networks:
primus-dev:
ipv4_address: 10.105.1.102
volumes:
- primus_dbdata:/var/lib/postgres/data
environment:
- POSTGRES_DB=primus75
- POSTGRES_USER=primus
- POSTGRES_PASSWORD=primstav
pgadm4:
image: "dpage/pgadmin4"
networks:
primus-dev:
ipv4_address: 10.105.1.103
ports:
- "3050:80"
volumes:
- /home/nils/docker-home:/var/docker-home
environment:
- PGADMIN_DEFAULT_EMAIL=nils.weinander@kulturit.se
- PGADMIN_DEFAULT_PASSWORD=dev
networks:
primus-dev:
driver: bridge
ipam:
config:
- subnet: 10.105.1.0/24
volumes:
data:
primus_dbdata:
这在 docker-compose up 之后工作得很好(至少 pgAdmin 可以与 PostgreSQL 对话)。
但是,然后我有一个脚本(实际上是一个 make 目标,但这不是这里的重点),它使用 docker-compose run 构建、运行和删除一个容器:
docker-compose run -e HOME=/app -e PYTHONPATH=/app/server -u 0 --rm backend \
bash -c 'cd /app/server && python tools/reindex_mp.py -s -n'
这不起作用,因为 reindex_mp.py 无法到达 10.105.1.101 上的 Solr,因为一次性容器不在同一个 Docker 网络上。那么,有没有办法通过 docker-compose run 告诉 docker-compose 使用命名网络? docker run 有一个选项 --network 但不适用于 docker-compose。
【问题讨论】:
-
你不能编辑
backend服务的docker-compose文件,让它使用primus-dev网络吗? -
backend 在另一个 docker-compose 文件中定义,但如果我在其中复制网络定义,它就可以工作。还有其他问题需要解决,但似乎这是可能的。
标签: docker networking docker-compose