我是Docker的新手,我正试图开始永久安装Rancher。要创建Docker容器,我运行以下命令:
docker run -d --name rancher-server -p 8080:8080 rancher/server
请注意,由于主机上的nginx占用了80,因此我想将容器的8080端口转发到主机的8080。
现在,当我停止上述容器并尝试使用docker start <Container ID>
重新启动它时,出现以下错误:
Error response from daemon: driver failed programming external connectivity on endpoint rancher-server (c18940f957ed1f737fd5453ea29755adea762d758643a64984d5e3ce8bd3fdbe): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
Error: failed to start containers: c93794a8c0ad
我知道由于nginx使用端口80会发生这种情况,所以我的问题是如何启动现有容器并告诉它转发其端口?
运行docker start -d -p 8080:8080 c93794a8c0ad
会给我以下错误:unknown shorthand flag: 'd' in -d
那么,如何启动具有转发端口的容器?谢谢!
答案 0 :(得分:1)
问题可能是两个程序在同一个端口上工作。
您可以在运行 docker run
命令时更改端口设置。
例如,您可以将容器的端口 8080
与计算机上的任意端口绑定,例如 8081
:
docker run -d --name rancher-server -p 8081:8080 rancher/server
左侧的端口号是 docker host 端口 - 您的计算机 - 右侧是 docker 容器 端口。
您可以change the ports 不删除docker 容器。 quin452 的说法 - 稍作修改:
获取容器 ID:
docker ps -a
停止容器:
docker stop [container name]
编辑容器 hostconfig.json
文件,位于
var/lib/docker/containers/[container ID]/hostconfig.json
在 PortBindings
部分中,
将现有的 HostPort
编辑为您想要的端口,
或自己添加(见下文)
保存并退出配置文件
重启docker:
sudo systemctl restart docker
启动容器:
docker start [container name]
示例配置文件:
"PortBindings": {
"3306/tcp": [
{
"HostIp": "",
"HostPort": "23306"
}
],
"443/tcp": [
{
"HostIp": "",
"HostPort": "2443"
}
],
"80/tcp": [
{
"HostIp": "",
"HostPort": "280"
}
]
}
答案 1 :(得分:0)
要更改端口映射,您需要删除并重新创建容器。因此,docker rm
您现有的容器,然后docker run
使用新的端口设置。
答案 2 :(得分:0)
我删除了该容器,并使用Rancher docs建议sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
的命令创建了一个新容器,现在按预期在正确的端口上停止和启动容器工作。我不知道问题出在哪里,但现在可以解决。