如何配置我的Docker容器在浏览器中运行?

时间:2019-05-14 12:55:08

标签: docker meteor docker-compose containers

如何正确配置和构建可在网络浏览器上运行的docker容器/映像?

我有一个流星Web应用程序,并且使用了以下现有的基本映像之一: jshimko / meteor-launchpad ,这是官方《流星指南》在Depolyment & Monitoring上推荐的,该教程位于{ {3}}。我已经能够基于我的网络应用构建图像,但是它从未分配过端口,因此无法在浏览器中运行它。

Dockerfile添加到了Web应用的根目录,并添加了以下内容

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 -a屈服:

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

您可以看到,没有为容器分配任何端口,以使我能够在浏览器上运行它。本教程建议此时,我应该能够在端口80 (在我的情况下为端口70)的本地主机上运行它。我在这里想念什么?如何配置我的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`

1 个答案:

答案 0 :(得分:4)

请确保仔细阅读流星发射板教程,因为您似乎错过了几点。

我注意到您说您的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 .

这样做之后,您可以按照本教程进行操作;但是,您可能需要在流星发射的Dockerfile中更改FROM debian:jessie才能使用更新的Debian版本。这不是一个有价值的解决方案,但是我建议您这样做,因为这听起来像您只是在尝试启动一个学习项目并使其运行。

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


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

相关问题