如何设置docker-compose文件以连接到内部容器网络和外部localhost网络?
我尝试在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
我也有一个独立的服务,并使用以下命令运行它:
docker run --name standalone_service --network host
还有其他原因与我的问题无关,为什么standalone_service无法合并到docker-compose文件中。因此,将其合并到docker-compose文件中并使用container_network并不是此服务的选择。
我希望myapp1(它是内部container_network的一部分)能够访问主机网络上的standalone_service。我该怎么做?
答案 0 :(得分:2)
鉴于您以standalone_service
的身份运行--network host
,它与主机上运行的任何其他进程都没有区别,并且From inside a Docker container, how do I connect to [the host] machine的各种答案应该对您有用。 / p>
第二种更可取的方法是在Docker Compose外部创建一个Docker网络,并将另一个容器附加到该网络上
docker network create container_network
docker run --net container_network -p 8888:8888 --name standalone_service ...
一旦这样做,您就可以在docker-compose.yml
中声明与an external network相同的网络。您甚至可以make this be the default
network,这样就不必手动配置其他服务来使用它。
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
如果您不介意以相反的顺序并根据实现细节来启动,您还可以“借用” Docker Compose创建的默认default
网络。
docker-compose up -d
docker run --net dirname_default -p 8888:8888 --name standalone_service ...
没有诸如“连接到外部localhost网络”之类的东西。每个网络环境(主机,以及每个容器)分别具有自己的“本地网络” 127.0.0.0/8; localhost
固定为IP地址127.0.0.1,始终表示“我”;在Docker上下文中,“特别是我从中调用的容器”。