英文:
Simple HTML App with NGNIX Docker container doesn't run on Railway.app - Application failed to respond (error-503)
问题
我有一个简单的HTML应用程序。在本地一切都正常工作。以下是我的Dockerfile,它位于同一文件夹中,并且也被Railway找到。
来自Railway.app的响应:
<h1 class="error-404">Nothing here... yet</h1>
<h1 class="error-503">Application failed to respond</h1>
我的Dockerfile:
# Dockerfile
# 使用来自Docker Hub的官方nginx基础镜像
FROM nginx
# 将当前目录的内容复制到容器中的指定目录
COPY . /usr/share/nginx/html
我也尝试了这个版本(同样的结果):
# 使用来自Docker Hub的官方nginx基础镜像
FROM nginx
# 将当前目录的内容复制到容器中的指定目录
COPY . /usr/share/nginx/html
# 暴露端口80
EXPOSE 80
# 当容器提供时启动Nginx。
CMD ["nginx", "-g", "daemon off;"]
这是我的项目:
ls
app.html assets Dockerfile favicon.ico index.html README.md
来自Railway的构建日志:
=========================
Using Detected Dockerfile
=========================
context: 13a5a...d67dbac
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 234B done
#1 DONE 0.2s
#2 [internal] load .dockerignore
#2 transferring context: 2B done
#2 DONE 0.2s
#3 [internal] load metadata for docker.io/library/nginx:latest
#3 DONE 0.8s
#4 [1/2] FROM docker.io/library/nginx@sha256:af296b...092305
#4 DONE 0.0s
#5 [internal] load build context
#5 transferring context: 3.58MB 0.0s done
#5 DONE 0.2s
#4 [1/2] FROM docker.io/library/nginx@sha256:af296b1...092305
#4 CACHED
#6 [2/2] COPY . /usr/share/nginx/html
#6 DONE 0.1s
#7 exporting to image
#7 exporting layers 0.0s done
#7 writing image sha256:e7fd80a...edb6b done
#7 naming to us-west1-docker.pkg.dev/railway-infra/railway-docker-users/project/8691...eefe3/service/17ba0e...d8f73:7865...df2682 0.0s done
#7 DONE 0.1s
Build time: 1.54 seconds
================
Publishing Image
================
The push refers to repository [us-west1-docker.pkg.dev/railway-infra/railway-docker-users/project/8691...efe3/service/17ba...8f73]
Preparing f0b9a7bbdced
Preparing 4fd834341303
Preparing 5e099cf3f3c8
Preparing 7daac92f43be
Preparing e60266289ce4
Preparing 4b8862fe7056
Preparing 8cbe4b54fa88
Waiting 4b8862fe7056
Waiting 8cbe4b54fa88
Layer already exists 4fd834341303
Pushing [> ] 53.39kB/3.58MB f0b9a7bbdced
Layer already exists e60266289ce4
Layer already exists 5e099cf3f3c8
Layer already exists 7daac92f43be
Layer already exists 4b8862fe7056
Layer already exists 8cbe4b54fa88
Pushing [=========================> ] 1.837MB/3.58MB f0b9a7bbdced
Pushing [==================================================>] 3.611MB f0b9a7bbdced
Pushed f0b9a7bbdced
7865993f...bdf2682: digest: sha256:683c0...fe44 size: 1782
Publish time: 0.64 seconds
Deploy log:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/05/27 17:18:00 [notice] 1#1: using the "epoll" event method
2023/05/27 17:18:00 [notice] 1#1: nginx/1.25.0
2023/05/27 17:18:00 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2023/05/27 17:18:00 [notice] 1#1: OS: Linux 4.19.0-22-cloud-amd64
2023/05/27 17:18:00 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/05/27 17:18:00 [notice] 1#1: start worker processes
我不明白问题是什么。我已经重新启动、重新构建,甚至完全删除了Railway.app中的项目,然后从GitHub重新上传,然后自动生成了一个新的域名。Dockerfile需要额外的命令还是Railway.app需要在项目中设置一些内容?
<details>
<summary>英文:</summary>
I have a simple HTML application. Everything works fine locally. Here is my Dockerfile, which is in the same folder and is also found by Railway.
Response from Railway.app:
<h1 class="error-404">Nothing here... yet</h1>
<h1 class="error-503">Application failed to respond</h1>
[![enter image description here][1]][1]
My Dockerfile:
# Dockerfile
# Use the official nginx base image from Docker Hub
FROM nginx
# Copy the contents of the current directory to the specified directory in the container
COPY . /usr/share/nginx/html
I also tried with this version (-> same results):
# Use the official nginx base image from Docker Hub
FROM nginx
# Copy the contents of the current directory to the specified directory in the container
COPY . /usr/share/nginx/html
# Expose port 80
EXPOSE 80
# Start Nginx when the container has provisioned.
CMD ["nginx", "-g", "daemon off;"]
This is my project:
ls
app.html assets Dockerfile favicon.ico index.html README.md
Build logs from Railway:
=========================
Using Detected Dockerfile
=========================
context: 13a5a...d67dbac
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 234B done
#1 DONE 0.2s
#2 [internal] load .dockerignore
#2 transferring context: 2B done
#2 DONE 0.2s
#3 [internal] load metadata for docker.io/library/nginx:latest
#3 DONE 0.8s
#4 [1/2] FROM docker.io/library/nginx@sha256:af296b...092305
#4 DONE 0.0s
#5 [internal] load build context
#5 transferring context: 3.58MB 0.0s done
#5 DONE 0.2s
#4 [1/2] FROM docker.io/library/nginx@sha256:af296b1...092305
#4 CACHED
#6 [2/2] COPY . /usr/share/nginx/html
#6 DONE 0.1s
#7 exporting to image
#7 exporting layers 0.0s done
#7 writing image sha256:e7fd80a...edb6b done
#7 naming to us-west1-docker.pkg.dev/railway-infra/railway-docker-users/project/8691...eefe3/service/17ba0e...d8f73:7865...df2682 0.0s done
#7 DONE 0.1s
Build time: 1.54 seconds
================
Publishing Image
================
The push refers to repository [us-west1-docker.pkg.dev/railway-infra/railway-docker-users/project/8691...efe3/service/17ba...8f73]
Preparing f0b9a7bbdced
Preparing 4fd834341303
Preparing 5e099cf3f3c8
Preparing 7daac92f43be
Preparing e60266289ce4
Preparing 4b8862fe7056
Preparing 8cbe4b54fa88
Waiting 4b8862fe7056
Waiting 8cbe4b54fa88
Layer already exists 4fd834341303
Pushing [> ] 53.39kB/3.58MB f0b9a7bbdced
Layer already exists e60266289ce4
Layer already exists 5e099cf3f3c8
Layer already exists 7daac92f43be
Layer already exists 4b8862fe7056
Layer already exists 8cbe4b54fa88
Pushing [=========================> ] 1.837MB/3.58MB f0b9a7bbdced
Pushing [==================================================>] 3.611MB f0b9a7bbdced
Pushed f0b9a7bbdced
7865993f...bdf2682: digest: sha256:683c0...fe44 size: 1782
Publish time: 0.64 seconds
Deploy log:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/05/27 17:18:00 [notice] 1#1: using the "epoll" event method
2023/05/27 17:18:00 [notice] 1#1: nginx/1.25.0
2023/05/27 17:18:00 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2023/05/27 17:18:00 [notice] 1#1: OS: Linux 4.19.0-22-cloud-amd64
2023/05/27 17:18:00 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/05/27 17:18:00 [notice] 1#1: start worker processes
I don't understand what the problem is. I have already restarted, rebuilt and even completely deleted the project from Railway.app and uploaded it again from GitHub and then auto-generated a new domain.
Does Dockerfile need additional commands or does Railway.app need to set something in the project?
[1]: https://i.stack.imgur.com/2Gi1j.png
</details>
# 答案1
**得分**: 2
感谢Balint的评论,我终于找到了解决方案。我错误地认为端口80默认处于活动状态。您必须创建一个名为"PORT"的项目变量,其值为"80"。显然,Railway会在项目中查找此变量,如果没有此变量,端口将不会被公开。
<details>
<summary>英文:</summary>
Thanks to the comment from Balint, I finally found the solution. I wrongly assumed that port 80 is active by default. You have to create a project variable "PORT" with the value "80". Apparently Railway searches for this variable in the project and without this variable the port is not exposed.
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论