我是一个新的docker,我试图得到一个永久安装的牧场开始。要创建docker容器,我运行以下命令:
docker run -d --name rancher-server -p 8080:8080 rancher/server
请注意,我希望将容器的8080端口转发到我的主机的8080,因为主机上的nginx占用了80。
现在,当我停止上面的容器并尝试使用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
那么如何启动带有转发端口的容器呢?谢谢!
发布于 2018-07-29 23:57:01
我删除了容器,并使用牧场主文档推荐的sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server命令创建了一个新的容器,现在按照预期在正确的端口上停止和启动容器工作。我不知道之前的问题是什么,但现在它可以工作了。
发布于 2021-03-15 16:54:42
问题可能是两个程序在同一个端口上工作。您可以在运行docker run命令时更改端口设置。例如,您可以将容器的端口8080与计算机上的任意端口绑定,如8081
docker run -d --name rancher-server -p 8081:8080 rancher/server
左边的端口号是docker 主机端口-您的计算机-右边是docker 容器端口。
您可以通过修改端口
您可以在不删除的情况下对停靠容器执行change the ports操作。用quin452的话说--只做了小小的修改:
docker ps -a
docker stop [container name]
hostconfig.json文件,该文件位于var/lib/docker/containers/[container ID]/hostconfig.json
PortBindings部分中,可以将现有的HostPort编辑到所需的端口,也可以自己添加它们(请参见下文)sudo systemctl restart docker
docker start [container name]
示例配置文件:
"PortBindings": {
"3306/tcp": [
{
"HostIp": "",
"HostPort": "23306"
}
],
"443/tcp": [
{
"HostIp": "",
"HostPort": "2443"
}
],
"80/tcp": [
{
"HostIp": "",
"HostPort": "280"
}
]
}发布于 2018-07-23 03:23:21
要更改端口映射,您需要删除并重新创建容器。因此,使用新的端口设置docker rm您现有的容器,然后对其执行docker run。
https://stackoverflow.com/questions/51468487
复制相似问题