docker - 容器在 docker-compose 中无法相互访问
问题描述
我正在使用这个 docker-compose.yml 文件:
version: "3.7"
networks:
test_net:
internal: true
services:
A:
image: nginx:1.17
networks:
- test_net
B:
image: node:14-alpine
command: wget A
networks:
- test_net
输出:
Creating network "test_test_net" with the default driver
Creating test_B_1 ... done
Creating test_A_1 ... done
Attaching to test_A_1, test_B_1
B_1 | Connecting to A (172.24.0.2:80)
B_1 | wget: can't connect to remote host (172.24.0.2): Host is unreachable
test_B_1 exited with code 1
容器 B 可以解析容器 A 的名称,但无法访问它。
编辑:我一直在环顾四周,似乎它可能是 docker0 接口的系统网络问题。
解决方案
昨天我遇到了类似的问题,当我提出这样的事情时:
network:
it-network:
driver: bridge
我认为这些服务无法相互访问,因为将网络的创建委托给 docker-compose 文件。
但是当我首先创建网络时:
docker network create --driver bridge it-network
然后在 docker-compose.yml 文件中使用
services:
service1:
networks:
- it-networks
.....
networks:
default:
external:
name: it-network
工作正常。
我使用的有用命令:
docker network inspect it-network
我发现的其他解决方案是使用扩展指令,这样您可以在服务和不同的 docker-compose 文件之间共享配置。
https://docs.docker.com/compose/extends/
但我还没有测试它。
我在 docker-compose 文件中使用的服务
- postgres(来自 docker hub)
- Jira Software(来自 Dockerfile 的预编译映像)
我的 docker compose 文件是这样的:
version: '3'
services:
postgresql-jira:
image: postgres:9.5-alpine
volumes:
- postgresqldata:/var/lib/postgresql/data
environment:
- 'POSTGRES_USER=devops'
# CHANGE THE PASSWORD!
- 'POSTGRES_PASSWORD=xxx'
- 'POSTGRES_DB=jiradb'
- 'POSTGRES_ENCODING=UNICODE'
- 'POSTGRES_COLLATE=C'
- 'POSTGRES_COLLATE_TYPE=C'
logging:
# limit logs retained on host to 25MB
driver: "json-file"
options:
max-size: "500k"
max-file: "50"
jira-software:
depends_on:
- postgresql-jira
image: XXX/jira-server:8.8.1
volumes:
- jiradata:/var/atlassian/jira
ports:
- '80:8080'
environment:
- 'JIRA_DATABASE_URL=postgresql://devops@postgresql/jiradb'
- 'JIRA_DB_PASSWORD=xxx'
- 'SETENV_JVM_MINIMUM_MEMORY=2048m'
- 'SETENV_JVM_MAXIMUM_MEMORY=4096m'
- 'JIRA_PROXY_NAME='
- 'JIRA_PROXY_PORT='
- 'JIRA_PROXY_SCHEME='
links:
- "postgresql-jira:postgresql-jira-db"
logging:
# limit logs retained on host to 25MB
driver: "json-file"
options:
max-size: "500k"
max-file: "50"
volumes:
jiradata:
external: false
postgresqldata:
external: false
networks:
default:
external:
name: it-network
推荐阅读
- r - 我可以通过在 Shiny 中更改 selectInput 的状态来触发 eventReactive 吗?
- android - VoIP 应用的 Android P 后台限制
- makefile - 子文件夹中包含先决条件的 Makefile
- r - 在 R 的表达式中使用字符串变量作为下标/上标
- c# - 如何在按钮单击时使用最新消息并将其写入 txt 文件?
- android - 如何在 Android Studio 中测试受限 Internet 访问
- qt5 - qt creator (3.5.1) 在打开源代码时崩溃
- sql - Powershell Invoke-Sqlcmd 工作目录
- php - 本地主机上的 Sublime 3 + Livereload(运行 sass)
- android - 我怎样才能在android studio中打破这个循环