我正在尝试学习如何将docker
compose与nginx容器的简单设置结合使用,该设置将请求重新路由到ghost容器。我正在使用标准的鬼影图像,但是有一个自定义的nginx图像(继承自标准图像)。
当我使用“ docker-compose up”运行合成文件时,它会立即退出,而“
docker_nginx_1以代码0退出”。但是,当我手动构建并运行它时,它运行良好,并且可以将浏览器导航到该容器并查看默认的nginx页面。我对撰写文件的误解是什么导致其行为与自定义构建有所不同?我该如何更改才能使其继续运行?
免责声明:我同时也在学习nginx,因此一次学习两件事可能会给我带来不必要的问题。
编辑:原始文件要复杂一些,但我已将问题简化为:如果我对自定义映像使用build命令,该自定义映像除了从默认的nginx映像继承外什么也不做,因此会立即退出。如果我使用默认的nginx图像,它将起作用。这些是现在相关的文件:
撰写文件:
ghost:
expose:
- "2368"
image: ghost
nginx:
# image: nginx << If I use this instead of my custom build, it doesn't exit
build: ./nginx
ports:
- "80:80"
- "443:443"
links:
- ghost
nginx / Dockerfile:
FROM nginx
原始文件(具有与上述相同的撰写文件):
nginx / Dockerfile:
FROM nginx
RUN rm /etc/nginx/nginx.conf
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY conf/sites-available/ghost /etc/nginx/sites-available/ghost
RUN mkdir /etc/nginx/sites-enabled
RUN ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost
EXPOSE 80 443
# Is this even the right command I have no idea
CMD service nginx start
nginx / conf / nginx.conf:
daemon off;
user nginx;
# Let nginx figure out the processes I guess
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
nginx / conf / sites-available / ghost
server {
listen 80;
server_name 127.0.0.1;
access_log /var/log/nginx/localhost.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://0.0.0.0:2368;
proxy_redirect off;
}
}
运行撰写:
plays-MacBook-Pro:docker play$ docker-compose up
Creating docker_ghost_1...
Creating docker_nginx_1...
Attaching to docker_ghost_1, docker_nginx_1
docker_nginx_1 exited with code 0
Gracefully stopping... (press Ctrl+C again to force)
Stopping docker_ghost_1... done
手动运行:
plays-MacBook-Pro:nginx play$ docker build --no-cache -t nginx_custom .
Sending build context to Docker daemon 8.704 kB
Step 0 : FROM nginx
---> 914c82c5a678
Step 1 : RUN rm /etc/nginx/nginx.conf
---> Running in 4ce9de96bb36
---> 98f97a9da4fc
Removing intermediate container 4ce9de96bb36
Step 2 : ADD conf/nginx.conf /etc/nginx/nginx.conf
---> dd3e089208a9
Removing intermediate container 36b9a47e0806
Step 3 : ADD conf/sites-available/ghost /etc/nginx/sites-available/ghost
---> 55fae53e5810
Removing intermediate container a82741d24af4
Step 4 : RUN mkdir /etc/nginx/sites-enabled
---> Running in 7659ead01b7b
---> 406be1c42394
Removing intermediate container 7659ead01b7b
Step 5 : RUN ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost
---> Running in e9658a08affa
---> 021a84216e8a
Removing intermediate container e9658a08affa
Step 6 : EXPOSE 80 443
---> Running in 230e4523794c
---> 23d85e1a04cb
Removing intermediate container 230e4523794c
Step 7 : CMD service nginx start
---> Running in 209e129cae21
---> d7004d6fa223
Removing intermediate container 209e129cae21
Successfully built d7004d6fa223
plays-MacBook-Pro:nginx play$ docker run -t nginx_custom
[It sits here on an empty line, running in the background]
刚遇到同样的问题,最初的 解决方法 是更改中的服务名称docker-compose.yml
。
这行得通,但 之所以 行得通,是因为Docker-compose缓存了构建并将其与服务名称绑定。每个docker-compose up
后的第一个只使用它之前建造的,所以所做的任何更改的Dockerfile
,或者的那部分docker-compose.yml
基本上忽略。
当您(和我)更改服务名称时,由于该服务名称之前没有被标记过,因此它触发了新的构建。
的 真正 的解决方案是做一个:搬运工-
撰写生成
重建图像(后面跟一个docker- compose up
)。他们的文档并没有真正强调这个问题。
容器总是在创建和运行后立即退出。 我尝试使用命令运行mssql实例 当尝试类似的SO link link时 它显示 但在run命令中我已经设置了'accept_eula=y'。
问题内容: 我在后台运行一个容器 它迅速退出。但是,如果我在前台运行,则可以正常运行。我使用检查了日志 没有错误。有任何想法吗? DOCKERFILE start-all.sh 问题答案: 一个Docker容器的主要过程完成后退出。 在这种情况下,它将在脚本结束时退出。我对hadoop不太了解,无法在这种情况下告诉您如何做,但是您需要要么在前台运行某些东西,要么使用诸如runit或supervis
问题内容: 我正在尝试部署使用docker-compose构建的应用程序,但是感觉好像我朝着完全错误的方向前进。 我的一切工作都在本地进行-通过适当的网络和主机启动我的应用程序。 我希望能够在生产机器上运行容器和网络的相同配置,而只是使用不同的文件。 我当前的工作流程如下所示: 在这一点上,我希望当它们到达那里时能够再次运行,但这试图根据文件重建容器。 我有一种明显的失落感。我是否应该通过完整的应
每当我尝试,我的容器都会以code退出。 我有以下: centos ansible中的Dockerfile:
问题内容: 我有一个从Docker集线器提取的Docker映像。 当我运行时,容器立即退出。 我无权访问Docker映像的源代码,包括Dockerfile。我所拥有的只是我从中获得的图像。 我需要调试/查看映像中的内容(例如查看和浏览映像的文件系统),而无需将其作为容器运行。 可能吗? 问题答案: 从所需的图像启动容器,如下所示: 即使未连接STDIN仍保持打开状态 分配一个伪tty 梅子退出后停