如何正确配置和构建可在网络浏览器上运行的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`
答案 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容器。您必须单独开始。