【问题标题】:How do I configure my docker container to run in the browser?如何配置我的 docker 容器以在浏览器中运行?
【发布时间】:2019-05-14 12:55:07
【问题描述】:

如何正确配置和构建我的 docker 容器/映像以在 Web 浏览器上运行?

我有一个流星网络应用程序,并使用现有的基础图像之一:jshimko/meteor-launchpad,这是由Depolyment & Monitoring 上的官方 Meteor 指南推荐的,教程位于 meteor-launchpad-github .我已经能够基于我的 网络应用 构建图像,但它从未分配过 端口,因此我无法在浏览器中运行它。

Dockerfile添加到我的网络应用程序的根目录,并添加以下内容

FROM debian:jessie

为了构建图像,我在终端中运行以下命令

docker build -t sirbt/myapp .

哪个屈服了:

Sending build context to Docker daemon  2.331MB
Step 1/1 : FROM debian:jessie
 ---> b6e9658de383
Successfully built b6e9658de383
Successfully tagged sirbt/myapp:latest

然后我开始将以下内容保存在.dockerignore 文件中,我也保存在应用程序目录根目录中

.git
.meteor/local
node_modules

然后运行下面的代码在容器中运行myapp

docker run -d \
  -e ROOT_URL=http://example.com \
  -e MONGO_URL=mongodb://url \
  -e MONGO_OPLOG_URL=mongodb://oplog_url \
  -e MAIL_URL=smtp://mail_url.com \
  -p 70:3000 \
  sirbt/myapp

然后代码生成:

4e616999e521014fcb19d33869b45c79d93d6774d2d02e2f413343b72294f88b

我按照这个命令:

docker ps

哪个产量:

CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS   NAMES

然而

docker ps -ayields:

CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS PORTS                                      NAMES
4e616999e521        sirbt/myapp         "bash"                   3 minutes ago       Exited (0) 2 minutes ago                           compassionate_greider

如您所知,没有将 port 分配给容器以使我能够在浏览器上运行它。本教程建议此时我应该能够在端口 80 (在我的情况下为端口 70) 上的 localhost 上运行它。我在这里想念什么?如何配置我的 docker 容器,以便分配一个端口,使我能够在浏览器中运行它?

在下面找到我的docker-compose.yml的内容

# docker-compose.yml

app:
  image: yourname/app
  ports:
    - "70:3000"
  links:
    - mongo
  environment:
    - ROOT_URL=http://example.com
    - MONGO_URL=mongodb://mongo:27017/meteor

mongo:
  image: mongo:latest
  command: mongod --storageEngine=wiredTiger

更新以反映我为什么不在我的 dockerfile 中使用FROM jshimko/meteor-launchpad:latest

当我按照教程中的建议使用 FROM jshimko/meteor-launchpad:latest 更新我的 Dockerfile 时。我收到以下错误消息:

`Get:6 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.1 MB in 8s (1154 kB/s)
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)

E: Some index files failed to download. They have been ignored, or old ones used instead.
The command '/bin/sh -c cd $APP_SOURCE_DIR &&   $BUILD_SCRIPTS_DIR/install-deps.sh &&   $BUILD_SCRIPTS_DIR/install-node.sh &&   $BUILD_SCRIPTS_DIR/install-phantom.sh &&   $BUILD_SCRIPTS_DIR/install-graphicsmagick.sh &&   $BUILD_SCRIPTS_DIR/install-mongo.sh &&   $BUILD_SCRIPTS_DIR/install-meteor.sh &&   $BUILD_SCRIPTS_DIR/build-meteor.sh &&   $BUILD_SCRIPTS_DIR/post-build-cleanup.sh' returned a non-zero code: 100`

【问题讨论】:

  • 您的容器已退出。使用 ** docker logs -f ** 检查日志并更新有问题的日志。你可能遗漏了什么。
  • @Akshaybarahate 感谢您的及时响应,遗憾的是docker logs -f 9a613c49cd46 命令没有产生任何结果。请回复
  • 那是你的整个 Dockerfile,那一行吗?你是COPY你的应用程序还是设置了默认的CMD
  • @DavidMaze 是的,不幸的是,就是这样!我是 Docker 镜像的新手,看起来教程已经完成了。任何帮助将不胜感激。

标签: docker meteor docker-compose containers


【解决方案1】:

请务必仔细阅读 meteor-launchpad 教程,因为您似乎错过了几点。

我注意到你说你的 Dockerfile 是:

FROM debian:jessie

这是你的主要问题。应该是:

FROM jshimko/meteor-launchpad:latest

(或FROM jshimko/meteor-launchpad:some-specific-version)。

通过更改FROM,您使教程的其余部分变得无关紧要。您现在只是构建和运行一个基本的 Debian 容器,它什么都不做。

不幸的是,meteor-launchpad 的图像似乎已损坏。它大约有 2 年没有更新了,它是基于旧版本的 Debian 构建的,其源代码已存档 - 这就是您的构建错误的原因(请参阅https://github.com/debuerreotype/docker-debian-artifacts/issues/66)。

如果你真的想使用meteor-launchpad,我建议你克隆它的仓库并自己构建镜像。

git clone https://github.com/jshimko/meteor-launchpad.git
cd meteor-launchpad
docker build -t jshimko/meteor-launchpad:latest .

完成后,您可能可以按照教程进行操作;但是,您可能需要在meteor-launchpad Dockerfile 中更改FROM debian:jessie 以使用更新的Debian 版本。这不是一个适合生产的解决方案,但我推荐它,因为听起来您只是想启动并运行一个学习项目。

我建议阅读 Docker 概念,因为 meteor-launchpad 文档似乎假设您对它们非常熟悉。你可以从Docker's own tutorial docs开始。


另外,您的docker-compose.yml 文件未被使用。 Docker Compose 是直接发出docker run 命令的替代;要使用它,请从 YML 文件所在的目录运行命令docker-compose up [-d]。仅使用您发布的 docker run 命令将从您构建的映像启动一个容器,但它不会启动一个 mongo 容器。您必须单独开始。

【讨论】:

  • 感谢您的快速响应。我通过解释为什么更改 FROM 参数来更新原始问题
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 2018-09-07
  • 2019-08-25
  • 2016-01-05
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 2016-07-09
相关资源
最近更新 更多