use*_*089 5 docker docker-compose
如何设置 docker-compose 文件以连接到内部容器网络和外部本地主机网络?
我尝试在 docker-compose 中使用 extra_hosts 属性,但无法获得我需要的结果
我的 docker-compose 包含以下内容:
version: '3.7'
services:
myapp1:
container_name:
myapp1
hostname:
myapp1
build:
context:
.
dockerfile:
Dockerfile
command:
["npm", "start"]
networks:
- container_network # This is an internal container network
myapp2:
... # Same idea as above
networks:
- container_network # This is an internal container network
networks:
container_network:
name:
container_network
driver:
bridge
Run Code Online (Sandbox Code Playgroud)
我还有一个独立的服务,我使用以下命令运行它:
docker run --name standalone_service --network host
Run Code Online (Sandbox Code Playgroud)
还有其他与我的问题无关的原因,即为什么standalone_service无法合并到docker-compose文件中。因此,将其合并到 docker-compose 文件并使用 container_network 不是此服务的选项。
我希望属于内部container_network的一部分的myapp1能够访问主机网络上的standalone_service。我该怎么做呢?
鉴于您已经运行了standalone_service
as --network host
,它与主机上运行的任何其他进程没有什么区别,并且从 Docker 容器内部,如何连接到 [主机] 计算机的各种答案应该适合您。
第二种更好的方法是在 Docker Compose 之外创建一个 Docker 网络,并将另一个容器附加到该网络
docker network create container_network
docker run --net container_network -p 8888:8888 --name standalone_service ...
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您可以将您的同一网络声明为docker-compose.yml
外部网络。您甚至可以将其设为default
网络,这样您就不必手动配置其他服务来使用它。
version: 3
services:
myapp1:
build: .
ports: ['3000:3000']
environment:
MYAPP2_URL: 'http://myapp2/'
STANDALONE_URL: 'http://standalone_service/'
# gets `command:` from the Dockerfile
# attaches to the `default` network
networks:
default:
external: true
name: container_network
Run Code Online (Sandbox Code Playgroud)
default
如果您不介意以相反的顺序启动并取决于实现细节,您还可以“借用”Docker Compose 创建的默认网络。
docker-compose up -d
docker run --net dirname_default -p 8888:8888 --name standalone_service ...
Run Code Online (Sandbox Code Playgroud)
不存在“连接到外部本地主机网络”这样的事情。每个网络环境(主机以及每个容器)都有自己的“本地主机网络”127.0.0.0/8;localhost
固定为 IP 地址 127.0.0.1,并且始终表示“我”;在 Docker 上下文中,“特别是我正在调用的容器”。
归档时间: |
|
查看次数: |
25069 次 |
最近记录: |