我有一个包含三个服务(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对话),这可以正常工作。
但是,然后我有了一个脚本(启动目标,但这不是重点),该脚本使用 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在 docker-compose run 中使用命名网络? docker run 具有选项-network ,但不适用于docker-compose。
答案 0 :(得分:1)
您可以在docker-compose外部创建一个docker网络,并在docker-compose中运行服务时使用该网络。
docker network create my-custom-created-network
现在在docker-compose内部,像这样使用此网络:
services:
serv1:
image: img
networks:
my-custom-created-network
networks:
my-custom-created-network:
external: true
网络创建示例创建一个桥接网络。 要跨主机访问容器,请使用覆盖网络。
您还可以使用在docker-compose内部创建的网络并将容器连接到该网络。
Docker将为docker-compose创建一个默认网络,并且未指定任何网络配置的服务将使用docker为该撰写文件创建的默认网络。
您可以通过执行以下命令来找到网络名称:
docker network ls
像这样启动容器时使用网络适当的名称
docker run [options] --network <network-name> <image-name>
注意:使用容器名称可以访问同一网络中的容器,您可以利用它代替ips