如果您不熟悉docker bundle,请阅读this.
所以我尝试从以下docker-compose.yml
version: "2"
services:
web:
image: cohenaj194/apache-simple
ports:
- 32701:80
nginx:
image: nginx
ports:
- 32700:80
但是这个捆绑包创建的docker服务的端口没有暴露,我无法通过端口32700或32701访问我的服务中的任何容器,正如我在docker-compose.yml
中指定的那样。我该如何公开docker bundle服务的端口?
更新:我认为我的问题可能是使用test.dab
创建的docker-compose bundle
文件中没有提及端口32700或32701:
{
"Services": {
"nginx": {
"Image": "nginx@sha256:d33834dd25d330da75dccd8add3ae2c9d7bb97f502b421b02cecb6cb7b34a1b6",
"Networks": [
"default"
],
"Ports": [
{
"Port": 80,
"Protocol": "tcp"
}
]
},
"web": {
"Image": "cohenaj194/apache-simple@sha256:6196c5bce25e5f76e0ea7cbe8e12e4e1f96bd36011ed37d3e4c5f06f6da95d69",
"Networks": [
"default"
],
"Ports": [
{
"Port": 80,
"Protocol": "tcp"
}
]
}
},
"Version": "0.1"
}
尝试将额外端口插入此文件也不起作用,并导致以下错误:
Error reading test.dab: JSON syntax error at byte 229: invalid character ':' after object key:value pair
Update2:我的服务可通过默认端口访问,当未定义主机端口时,docker swarm会分配给服务:
user@hostname:~/test$ docker service inspect test_nginx --pretty
ID: 3qimd4roft92w3es3qooa9qy8
Name: test_nginx
Labels:
- com.docker.stack.namespace=test
Mode: Replicated
Replicas: 2
Placement:
ContainerSpec:
Image: nginx@sha256:d33834dd25d330da75dccd8add3ae2c9d7bb97f502b421b02cecb6cb7b34a1b6
Networks: 1v5nyqqjnenf7xlti346qfw8n
Ports:
Protocol = tcp
TargetPort = 80
PublishedPort = 30000
然后我可以从端口30000获取我的服务,但是我希望能够定义我的服务将使用的主机端口。
答案 0 :(得分:0)
从Docker 1.12版本开始,无法在捆绑包中指定“已发布”端口。捆绑包是一种可移植的格式,暴露的端口是不可移植的(因为如果两个捆绑包使用相同的捆绑包,它们会发生冲突)。
因此,暴露的端口不会成为捆绑配置的一部分。目前唯一的选择是运行docker service update
来添加已发布的端口。将来可能还有其他方法可以实现这一目标。