【问题标题】:Mapping docker port is failed映射 docker 端口失败
【发布时间】:2019-01-09 19:49:56
【问题描述】:

使用以下 dockerfile 使用 centos7 创建新的 docker 镜像(rm/node:10.0)。

FROM rm/node:9.0
EXPOSE 3000

WORKDIR /Reader_Manager/SISPlatform/Auth
RUN npm install

WORKDIR /Reader_Manager/SISPlatform/Auth/portal
CMD npm run-script dev-server-linux

"npm run-script dev-server-linux" 将调用下面在 package.json 文件中定义的命令

"dev-server-linux": "export NODE_ENV=development && pm2 start --no-daemon AuthServer -o ../../logs/pm2/out/auth_out.log -e ../../logs/pm2/err/auth_error.log --log-date-format 'DD-MM-YYYY HH:mm:ss.SSS'",

当我尝试在后台运行创建的 docker 映像时,它正在运行。

docker run -d rm/node:10.0
08633576828fe33ba880c7b6a40dd9306c885d24ce36a765a459f5acc8e91808
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.


docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
08633576828f        rm/node:10.0        "/bin/sh -c 'npm run-"   About a minute ago   Up About a minute   3000/tcp            nostalgic_gates

当我在容器内运行 nodejs 时,暴露了 3000 端口。所以我尝试映射 3000 端口,但失败并出现错误。

[dkanagaraj@localhost docker_test]$ docker run -p 3000:3000 -d rm/node:10.0
3160c27cd2ee964474d137024c1f392dafe5242874842b5f5cdf28a4dfb27e51
Error response from daemon: Cannot start container 3160c27cd2ee964474d137024c1f392dafe5242874842b5f5cdf28a4dfb27e51: failed to create endpoint big_wing on network bridge: COMMAND_FAILED: '/sbin/iptables -w2 -t nat -A DOCKER -p tcp -d 0/0 --dport 3000 -j DNAT --to-destination 172.17.0.3:3000 ! -i docker0' failed: iptables: No chain/target/match by that name.

【问题讨论】:

    标签: node.js docker dockerfile pm2 docker-container


    【解决方案1】:

    您系统上的某些东西已经删除了它需要工作的 docker iptables 条目。提出了两个修复here:

    对于 CentOS:

    sudo service docker restart
    sudo service iptables save
    

    对于 Ubuntu:

    sudo apt-get install iptables-persistent
    sudo service docker restart
    iptables-save > /etc/iptables/rules.v4 # you may need to "sudo -s" to get a root shell first
    

    docker重启后,应该可以看到nat表下的docker链了:

    iptables -t nat -vL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2020-02-29
      • 2019-04-10
      • 2016-12-15
      相关资源
      最近更新 更多