別のコンテナーから自分のAPIをカールする必要があります。コンテナー1はnginxと呼ばれ、コンテナー2はfpmと呼ばれます
FPMコンテナーをbashしてnginxコンテナーをカールできるようにする必要があります。
構成:
services:
nginx:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
volumes:
- ./docker/nginx/conf/dev/api.conf:/etc/nginx/conf.d/default.conf
ports:
- 8080:80
links:
- fpm
fpm:
build:
context: .
dockerfile: ./docker/fpm/Dockerfile
volumes:
- .:/var/www/html
- ./docker/fpm/conf/dev/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
- ./docker/fpm/conf/dev/api.ini:/usr/local/etc/php/conf.d/api.ini
env_file:
- ./docker/mysql/mysql.env
- ./docker/fpm/conf/dev/fpm.env
links:
- mysql
shm_size: 256M
extra_hosts:
- myapi.docker:nginx
私の最初の考えは、extra_hosts
オプションのような:
extra_hosts:
- myapi.docker:nginx
しかし、docker-compose upは次のエラーで失敗します:
エラー:apiwip_fpm_1の場合サービスfpmのコンテナを作成できません:add-Host: "nginx"のIPアドレスが無効です
Dockerのネットワーク構成を使用している人の例をいくつか見ましたが、アドレスを解決するだけでは上回っています。
文字通り単に渡すのではなく、コンテナのIPアドレスを解決または評価するにはどうすればよいですか?
services:
nginx:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
volumes:
- ./docker/nginx/conf/dev/api.conf:/etc/nginx/conf.d/default.conf
ports:
- 8080:80
networks:
my_network:
aliases:
- myapi.docker
- docker_my_network
fpm:
build:
context: .
dockerfile: ./docker/fpm/Dockerfile
volumes:
- .:/var/www/html
- ./docker/fpm/conf/dev/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
- ./docker/fpm/conf/dev/api.ini:/usr/local/etc/php/conf.d/api.ini
env_file:
- ./docker/mysql/mysql.env
- ./docker/fpm/conf/dev/fpm.env
links:
- mysql
shm_size: 256M
extra_hosts:
- myapi.docker:nginx
networks:
- my_network
networks:
my_network:
driver: bridge
@edwardは、この解決策があなたのために働いたかどうか私に知らせます
ドッカーのドキュメントから、
https://docs.docker.com/compose/networking/
Dockerネットワーク内からホスト名としてサービス名(この場合はnginx
)を使用できるはずです。したがって、私のFPMコンテナーをbashしてcurl nginx
を呼び出すと、Dockerが解決します。お役に立てれば。
クイックフィックスは、Dockerによって生成された動的IPをポイントすることです。これは変更されるかもしれませんが...ええ。
ネットワークを探す:docker network ls
NETWORK ID NAME DRIVER SCOPE
72fef1ce7a50 apiwip_default bridge local <-- here
cdf9d5b885f6 bridge bridge local
2f4f1e7038fa Host Host local
a96919eea0f7 mgadmin_default bridge local
30386c421b70 none null local
5457b953fadc website2_default bridge local
1450ebeb9856 anotherapi_default bridge local
ネットワークIDをコピーする
docker network inspect 72fef1ce7a50
"Containers": {
"345026453e1390528b2bb7eac4c66160750081d78a77ac152a912f3de5fd912c": {
"Name": "apiwip_nginx_1",
"EndpointID": "6504a3e4714a6ba599ec882b21f956bfd1b1b7d19b8e04772abaa89c02b1a686",
"MacAddress": "02:42:ac:14:00:05",
"IPv4Address": "172.20.0.5/16", <-- CIDR block
"IPv6Address": ""
},
"ea89d3089193825209d0e23c8105312e3df7ad1bea6b915ec9f9325dfd11736c": {
"Name": "apiwip_fpm_1",
"EndpointID": "dc4ecc7f0706c0586cc39dbf8a05abc9cc70784f2d44c90de2e8dbdc9148a294",
"MacAddress": "02:42:ac:14:00:04",
"IPv4Address": "172.20.0.4/16",
"IPv6Address": ""
}
},
そのCIDRブロックのIPアドレスをextra_hostsオプションに追加します。
extra_hosts:
- myapi.docker:172.20.0.5