我似乎无法找到一种方法,使得使用docker-compose run
与docker run
相同的方式来实现端口发布。
使用Docker Compose(因此在docker-compose.yml
中进行端口映射)会导致curl
出现“连接失败”的错误:
$ docker-compose run flask
* Running on http://0.0.0.0:2048/ (Press CTRL+C to quit)
$ curl http://localhost:2048/
curl: (7) Failed connect to localhost:2048; Connection refused
然而,当手动将端口传递给
docker run
时,一切都很好:$ docker run -p 2048:2048 --name flask -t flask_image
* Running on http://0.0.0.0:2048/ (Press CTRL+C to quit)
$ curl http://localhost:2048
Hello World!
我错过了什么?
Dockerfile
FROM centos:7
# Install EPEL repo.
RUN rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# Install Python and Pip.
RUN yum -y update && yum -y install \
python \
python-pip
# Flask is necessary to run the app.
RUN pip install flask
EXPOSE 2048
ADD hello_world_flask_app.py /src/hello_world_flask_app.py
CMD ["python", "/src/hello_world_flask_app.py"]
hello_world_flask_app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=2048)
docker-compose.yml
version: '2'
services:
flask:
build: .
ports:
- "2048:2048"
docker-compose
和--service-ports
无法解决从主机使用curl时的问题,只有使用-p
选项才能解决。这是我应该提交到GitHub Issue的错误吗?还是我漏掉了其他什么东西? - JimmidyJoo--service-ports
应该按照 yaml 文件中定义的端口发布端口,但如果实际服务已经在运行,则可能没有完成此操作。如果无法正常工作,则一定要在 GitHub 上打开问题(但请确保搜索现有问题)。我最近几周没有密切关注 docker-compose 问题跟踪器,所以这可能是一个已知问题。 - thaJeztahports
选项旁边记录这里。 - Elle Mundy