【问题标题】:expose port inside docker at docker run在 docker run 暴露 docker 内部的端口
【发布时间】:2018-06-20 15:53:30
【问题描述】:

我只想公开与芹菜花绑定的端口5555,以托管ip和端口。有人可以帮忙吗?

下面是 dockerfile 的一部分。

让这个容器之外的世界可以使用 80 端口

暴露 5555

定义环境变量

ENV NAME worker-app

创建路径

运行 /etc/init.d/celeryd 创建路径

清除 symfony 应用缓存

运行 cd /srv/clickhq/ && rm -rf var/cache/*

运行 chown -R lighthouse:lighthouse /srv/clickhq/

清除 php 应用缓存

USER 灯塔 运行 cd /srv/clickhq/ && ./clearcache.sh

容器启动时启动 celeryd、celerybeat 和 php-fpm 服务

块引用

USER root
RUN chown -R lighthouse:lighthouse /var/run/celery/ && chown -R lighthouse:lighthouse /var/log/celery/
RUN chmod -R 755 /var/log/celery/ && chmod -R 755 /var/run/celery/
RUN chown -R lighthouse:lighthouse /srv/clickhq/
ENTRYPOINT sudo service celeryd start && sudo service celerybeat start && service php7.0-fpm start && service rsyslog start && /usr/bin/python /usr/local/bin/flower -A celery --broker=redis://password@192.168.51.4:6379/0 && bash

块引用

我使用的 Docker 运行命令是

"sudo docker run -it --rm --name worker-app -d worker-app --privileged -p 192.168.51.3:5555:5555 --net="bridge"

【问题讨论】:

  • -p 80:5555 足够了,不需要IP。
  • 但显示如下。 root@workerapp:/srv/clickhq# docker ps CONTAINER ID IMAGE COMMAND 创建状态端口名称 6be26fa92f1f worker-app "/bin/sh -c 'sudo se..." 3 seconds ago Up 1 seconds 5555/tcp worker "它应该像这样绑定这个 ryt ? 0.0.0.0:80->5555/tcp"

标签: docker docker-compose


【解决方案1】:

问题是您实际上不是将参数-p 80:5555 传递给docker run,而是传递给入口点。

在此命令sudo docker run -it --rm --name worker-app -d worker-app --privileged -p 192.168.51.3:5555:5555 --net="bridge" 中,worker-app 是图像名称,因此它之后的所有内容 (--privileged -p 192.168.51.3:5555:5555 --net="bridge") 都是入口点的参数。

如果您将图像名称更改为末尾,它应该可以工作:

sudo docker run -it --rm --name worker-app -d --privileged -p 80:5555 --net="bridge worker-app

【讨论】:

  • 下面的命令是否正确? "sudo docker run -it --rm -p 5555:5555 --name worker-app -d worker-app"
  • 是的,因为 -p 在 docker 镜像之前
  • 我只想在入口点的 shell 脚本中运行以下命令。你能告诉我怎么做吗? “/usr/bin/python /usr/local/bin/flower -A celery --broker=redis://password@192.168.51.4:6379/0” 我是在下面的 shell 脚本中完成的。但它不起作用。 #!/bin/sh cd ~ exec /usr/bin/python /usr/local/bin/flower -A celery --broker=redis://password@192.168.51.4:6379/0
  • ENTRYPOINT["/bin/sh", "-c", "/usr/bin/python /usr/local/bin/flower -A celery --broker=redis://password@192.168.51.4:6379/0"]
  • 如何做到这一点? "ENTRYPOINT sudo service celeryd start && sudo service celerybeat start && service php7.0-fpm start && service rsyslog start && /usr/bin/python /usr/local/bin/flower -A celery --broker=redis://password @192.168.51.4:6379/0 && bash"