Docker: 如何启动现有容器并转发端口?

Docker: How to start an existing container and forward the ports?

我是 docker 的新手,我正在尝试开始永久安装 Rancher。要创建 docker 容器,我 运行 使用以下命令:

docker run -d --name rancher-server -p 8080:8080 rancher/server

注意,我想将容器的8080端口转发到我主机的8080,因为80被我主机上的nginx占用了。

现在,当我停止上述容器并尝试使用 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

那么如何启动一个带有转发端口的容器呢?谢谢!

要更改端口映射,您需要删除并重新创建容器。因此 docker rm 您现有的容器,然后 docker run 使用新的端口设置。

我删除了容器并使用 Rancher 文档推荐的命令创建了一个新容器 sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server,现在在正确的端口上按预期停止和启动容器工作。之前不知道是什么问题,现在可以了

问题可能是两个程序在同一个端口上工作。 您可以在 运行 docker run 命令时更改端口设置。 例如,您可以将容器的端口 8080 绑定到计算机上的任意端口,例如 8081:

docker run -d --name rancher-server -p 8081:8080 rancher/server

左侧端口号是 docker host 端口 - 您的计算机 - 右侧是 docker 容器端口。

可以修改端口

你可以change the ports of a docker container without deleting it. The way quin452 把它 - 稍作修改:

  1. 获取容器ID:

    docker ps -a

  2. 停止容器:

    docker stop [container name]

  3. 编辑容器 hostconfig.json 文件,找到于

    var/lib/docker/containers/[container ID]/hostconfig.json

  4. PortBindings 部分中, 将现有的 HostPort 编辑到您想要的端口, 或自己添加(见下文)

  5. 保存并退出配置文件

  6. 重启docker:

    sudo systemctl restart docker

  7. 启动容器:

    docker start [container name]

示例配置文件:

"PortBindings": {
    "3306/tcp": [
        {
            "HostIp": "",
            "HostPort": "23306"
        }
    ],
    "443/tcp": [
        {
            "HostIp": "",
            "HostPort": "2443"
        }
    ],
    "80/tcp": [
        {
            "HostIp": "",
            "HostPort": "280"
        }
    ]
}

尝试使用以下

$docker run -d --name rancher-server -p 8080:80 rancher/server