我正在关注Docker入门教程,我被困在part 3(Docker Compose)。我正在运行新的Ubuntu 16.04安装。遵循part 1和part 2的教程,除了登录到Docker帐户并将新创建的映像推送到远程存储库。
Docker镜像文件和python文件与part 2中的相同,.yml文件与part 3相同(我用vim复制粘贴它们)。
我可以使用docker compose部署堆栈显然很好。但是,当到达我应该通过curl发送请求的部分时,我得到以下响应
curl: (7) Failed to connect to localhost port 80: Connection refused
从docker service ls
返回后,这是docker stack deploy
的输出:
ID NAME MODE REPLICAS IMAGE PORTS
m3ux2u3i6cpv getstartedlab_web replicated 1/5 username/repo:tag *:80->80/tcp
这是docker container ls
的输出(在docker service ls
之后点击):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd870fcb64f4 username/repo:tag "python app.py" 7 seconds ago Up 1 second 80/tcp getstartedlab_web.2.p9v9p34kztmu8rvht3ndg2xtb
db73404d495f username/repo:tag "python app.py" 7 seconds ago Up 1 second 80/tcp getstartedlab_web.1.z3o2t10oiidtzofsonv9cwcvd
虽然docker ps
没有返回任何行。
这是docker network ls
:
NETWORK ID NAME DRIVER SCOPE
5776b070996c bridge bridge local
47549d9b2e88 docker_gwbridge bridge local
59xa0454g133 getstartedlab_webnet overlay swarm
e27f62ede27d host host local
ramvt1h8ueg7 ingress overlay swarm
f0fe862c5dcc none null local
我仍然可以将图片作为单个容器运行并获得预期结果,即能够通过浏览器或curl连接到它并获取与Redis相关的错误消息,但我不明白为什么在部署堆栈时它不起作用。
就Ubuntu防火墙设置而言,自安装以来我一直没有修改,至于Docker和Docker Compose,我只遵循了第1章到第3章“入门”教程中的步骤,包括下载Docker Compose二进制文件和使用chmod更改权限,如上所述。我还将我的用户添加到Docker组,所以每次我需要运行命令时都不必sudo。我不在代理服务器后面(我在本地运行所有测试)并且我没有修改任何默认值。
我认为这可能与this question重复,但尚未得到回答或评论。它不是this question的副本,因为我正在使用不同的教程。
更新
实际上,我使用的是相同的docker-compose.yml文件。关键问题是名称与docker镜像名称不匹配,如docker service ls
输出中所示。我感谢Janshair Khan的灵感。奇怪的是9个月前显然创建了一个用户名/ repo 图像:
REPOSITORY TAG IMAGE ID CREATED SIZE
<my getting-started image>
python 2.7-slim 4fd30fc83117 7 weeks ago 138MB
hello-world latest f2a91732366c 2 months ago 1.85kB
username/repo <none> c7f5ee4d4030 9 months ago 182MB