【发布时间】:2021-09-06 20:05:40
【问题描述】:
上下文
我正在我的个人计算机上运行一个带有 docker-compose 文件的 Meteor (js) 应用程序的 dockerized ubuntu。它附加到一个 mongo DB 容器。一个 nginx 代理容器正在运行,以使我的开发 url 使用 ssl (https) 保护。
Docker 镜像
- ubuntu : ubuntu:18.04
- nginx 代理:jwilder/nginx-proxy:alpine
- mongo : mongo:latest
- 加上我自己的本地流星应用程序。
其他
- 流星版本:1.8.1
- Docker 版本:18.09.3,构建 774a1f4
- Docker Compose 版本:1.23.2,内部版本 1110ad01
问题
由于我使用 docker-compose down 停止了我的容器,当我重新启动它们时,我的 webapp 容器一直退出(退出代码为 6)。自从我之前的 docker-compose -f docker-compose.dev.yml --verbose up 以来,我没有更改 docker-compose 文件
docker-compose -f docker-compose.dev.yml --verbose up 显示的错误
compose.cli.verbose_proxy.proxy_callable: docker inspect_container <- ('26d90365fe9a4b0c0eb24cb2c040aa43cf8ec207764f350b6273ee7362d9fe0e')
compose.cli.verbose_proxy.proxy_callable: docker wait <- ('26d90365fe9a4b0c0eb24cb2c040aa43cf8ec207764f350b6273ee7362d9fe0e')
urllib3.connectionpool._make_request: http://localhost:None "GET /v1.25/containers/26d90365fe9a4b0c0eb24cb2c040aa43cf8ec207764f350b6273ee7362d9fe0e/json HTTP/1.1" 200 None
urllib3.connectionpool._make_request: http://localhost:None "POST /v1.25/containers/26d90365fe9a4b0c0eb24cb2c040aa43cf8ec207764f350b6273ee7362d9fe0e/wait HTTP/1.1" 200 30
compose.cli.verbose_proxy.proxy_callable: docker wait -> {'Error': None, 'StatusCode': 6}
compose.cli.verbose_proxy.proxy_callable: docker inspect_container -> {'AppArmorProfile': 'docker-default',
'Args': [],
'Config': {'ArgsEscaped': True,
'AttachStderr': False,
'AttachStdin': False,
'AttachStdout': False,
'Cmd': ['meteor'],
'Domainname': '',
'Entrypoint': None,
'Env': ['ENV_APP_SERVER_USERNAME=app',
...webappContainer exited with code 6
docker ps -a 的结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26d90365fe9a xxxxxxxxxx_webapp "meteor" 23 minutes ago Exited (6) 13 seconds ago webappContainer
4073bbfe37cf mongo "docker-entrypoint.s…" 39 minutes ago Up 14 seconds 0.0.0.0:27017->27017/tcp mongoDBContainer
201f0a99d1cf jwilder/nginx-proxy:alpine "/app/docker-entrypo…" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx-proxy_nginx-proxy_1
docker logs <container_id> 的结果
** 无 **
怎么样?容器甚至不会启动。当我执行 docker run 时,它可以工作..
源文件
- docker-compose.dev.yml
version: '3'
services:
webapp:
container_name: webappContainer
env_file: .env
environment:
VIRTUAL_HOST: mysite.local
VIRTUAL_PORT: ${PORT}
build:
context: ${CONTEXT}
dockerfile: ${DOCKERFILE}...
volumes:
- ${VOLUME}:/usr/src/app
expose:
- ${PORT}
networks:
- dbAppConnector
- default
depends_on:
- mongodb
mongodb:...
container_name: ${MONGO_CONTAINER_NAME}
image: mongo
restartmongodb: always
env_file: .env
ports:
- "${MONGO_PORT}:${MONGO_PORT}"..
networks:
dbAppConnector:
volumes:
- mongo_volume:/data/db
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
volumes:
mongo_volume:
networks:
default:
external:
name: nginx-proxy
dbAppConnector:
请注意,当我执行
docker-compose config时,每个 .env 变量都会正确显示。
- Dockerfile.dev
FROM ubuntu:18.04
# Set environment dir & copy files
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
# Make host.docker.internal accessible from outside the container (dev only)
# RUN ip -4 route list match 0/0 | awk '{print $3 "host.docker.internal"}' >> /etc/hosts
# Add user to run localy (dev only) the app
RUN addgroup meteoruser && useradd -rm -d /home/moff -s /bin/bash -g root -G sudo -u 1000 meteoruser
# Update distribution
RUN apt-get update -q && apt-get clean \
# Install curl
&& apt-get install curl -y \
# Install Meteor
&& (curl https://install.meteor.com | sh) \
# Install node js
&& cd /usr/src/app \
# replace vx.x.x by meteor node -e 'console.log("I am Node.js %s!", process.version);' output from my project folder.
&& bash -c 'curl "https://nodejs.org/dist/v8.15.1/node-v8.15.1-linux-x64.tar.gz" > /usr/src/app/required-node-linux-x64.tar.gz' \
&& cd /usr/local && tar --strip-components 1 -xzf /usr/src/app/required-node-linux-x64.tar.gz \
&& rm /usr/src/app/required-node-linux-x64.tar.gz \
&& cd /usr/src/app \
&& npm install
RUN cd /usr/src/app && chown -Rh meteoruser .meteor/local
EXPOSE 80
ENV PORT 80
WORKDIR /usr/src/app
USER meteoruser
CMD ["meteor"]
我目前尝试解决的问题
- 我停止并删除了所有容器,删除了所有映像,删除了所有网络,并重建了所有内容。
- 我检查了我的互联网访问(平均 ping:~35 毫秒)。
- 我尝试了不同版本的“Meteor js”(1.8.1、最新、1.8.0.2),在 Dockerfile.dev 部分使用
&& (curl https://install.meteor.com | sh) \标记?release=1.8.0.2。 - 当容器退出时,我尝试查找有关代码 6 的一些文档,但没有发现任何相关内容。
- 它试图查看日志,但对于退出的应用程序容器 xxxxxx_webapp 没有可用的日志:结果为空。
- 我尝试单独启动 xxxxxx_webapp 容器,结果很奇怪,
docker run xxxxxxx_webapp。
This is your first time using Meteor!
Installing a Meteor distribution in your home directory.
Downloading Meteor distribution
花了 2 多分钟才终于显示出来:
Retrying download in 5 seconds …
Retrying download in 5 seconds …
Retrying download in 5 seconds …
Retrying download in 5 seconds …
[[[[[ /usr/src/app ]]]]]
=> Started proxy.
=> Started MongoDB.
因此容器正在运行而无需使用单独的docker run 命令退出......
提醒:4 周多以来一切正常,然后我突然怀疑我的新互联网连接速度太慢(我 1 周前从父母家搬到了这里)。
大家能给点建议吗?我可以提供任何其他信息来帮助您了解我所缺少的吗?提前致谢!
编辑
其他尝试使事情发挥作用:
- 我从 docker 中删除并重新安装了所有内容。
- 我在 3 周前试用了该应用的旧版本,该版本可以正常运行。
- 我尝试了所有方法,除了使用另一个 wi-fi。这行得通吗?我不这么认为,但总有希望。
【问题讨论】:
-
你能把你的代码删减一些吗?如果网络设置等细节对问题没有任何影响,请删除它们。
-
您还使用 Docker 绑定挂载来替换映像中的应用程序代码。这不是你在生产设置中做过的事情(图像应该是独立的),我建议在开发设置中也尽量避免它;在有意义时使用本机主机工具。
${VOLUME}目录的内容可能对于重现这一点至关重要。 -
@DavidMaze 绑定挂载仅用于开发目的,以便我可以在浏览器中享受热代码重载,但当然,在生产中它是自容器映像!好的,我会削减它谢谢你的回复:)
-
由于您正在安装源代码,并且容器正在使用“meteor”命令运行,您是否在两次运行之间更改了任何源代码文件?我们可以看到完整的撰写文件吗?
-
@DaveS 我编辑了 docker-compose 文件内容。我想我会尝试获取该应用程序的先前版本并运行它以查看是否仍然存在该问题。我会告诉你它是否有效:)
标签: docker meteor docker-compose