这只是生产中的一个问题。
我有两个Docker主机,一个运行nginx容器(服务Ember应用程序),另一个运行postgres容器和rails-api容器。 我想将后两个容器移动到第一个Docker主机上,这样它们就可以全部托管在一个上,我可以删除第二个Docker主机。 Rails-api使用回形针上传照片。
在Ember应用程序生成版本中,我通过将ENV.host = 'dockerhost2.com:3000/'
添加到adapter / application.js中的config / environment.js和host: ENV.host
来指向rails后端。
如果我保持原样(有2个泊坞主机),一切都很奇怪 - 也就是说,图像传送并显示在前端。但是,如果我将所有容器移动到一个泊坞主机,则无法检索图像本身并返回404。
图片网址始终为“public / system / 000 / path / to / Image.jpg”。当我把东西分开(在2个泊坞主机上)去'dockerhost1.com/public/system/000/path/to/Image.jpg'时工作得很好虽然我不明白为什么,因为rails应用程序在端口上服务3000并且在不同的主机上。但是当我将所有容器组合到1个docker主机上时,相同的图像URL返回404并且只有在我转到“dockerhost1.com:3000/public/system/000/path/to/Image.jpg”时才能工作。这很令人困惑。
当我将所有容器放到1个docker机器上并构建Ember应用程序以指向docker.machine.ip:3000
时,本地一切都很好用。去'docker.machine.ip / public / system / 000 / path / to / Image.jpg'确实找到了这个图像,不可否认,我不明白为什么。
我的Ember docker-compose.yml
version: '2'
services:
server:
image: nginx
volumes:
- ./dist:/usr/share/nginx/html
- ./nginx-site.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
我的rails docker-compose.yml
version: '2'
volumes:
sarahdeyong-postgres:
images:
services:
rails: &defaults
build: .
image: romanhood/sarahdeyong-api:0.0.1
volumes:
- .:/myapp
- images:/myapp/public/system/
depends_on:
- postgres
entrypoint: ["bundle", "exec", "rails"]
server:
<<: *defaults
tty: true
stdin_open: true
command: server -p 3000 -b '0.0.0.0'
ports:
- "3000:3000"
postgres:
image: postgres
volumes:
- sarahdeyong-postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
和nginx-site.conf:
# pushState friendly!
# The setup:
# * website name is `_`
# * javascript app is located at `/app`
charset utf-8;
tcp_nopush on;
tcp_nodelay off;
client_header_timeout 10s;
client_body_timeout 10s;
client_max_body_size 128k;
reset_timedout_connection on;
gzip on;
gzip_types
text/css
text/javascript
text/xml
text/plain
application/javascript
application/x-javascript
application/json
application/xml
application/rss+xml
application/atom+xml
font/truetype
font/opentype
image/svg+xml;
server {
listen 80;
server_name sarahdeyong;
root /usr/share/nginx/html;
# To make sure any assets can get through :)
location / {
try_files $uri @rewrites;
}
# If no asset matches, send it to your javascript app. Hopefully it's a route in the app!
location @rewrites {
rewrite ^(.+)$ /index.html last;
}
}
如何在我的Ember应用程序中正确检索和显示我的图像?
答案 0 :(得分:0)
由于您已经在使用docker,为什么不使用其内部网络功能。我怀疑ember应用程序无法连接回localhost / domain1.com,因为它指的是容器而不是主机。
创建一个泊坞网络并将两个容器放在其上。这实际上连接了本地网络上的容器。然后,您可以按名称引用容器。因此,在ember应用程序中,您只需name-of-rails-container:3000
即可访问它。无需在rails应用程序上公开端口3000。